このトピックでは、GORM ライブラリを使用して LindormTable に接続し、使用する手順について説明します。
前提条件
Go がインストールされていること。 Go 1.17 以降のバージョンをインストールすることをお勧めします。 Go のインストール方法の詳細については、ダウンロードとインストールをご参照ください。
LindormTable のバージョンが 2.6.1 以降であること。 LindormTable のバージョンを確認またはアップグレードする方法の詳細については、LindormTable のリリースノートとLindorm インスタンスのマイナーエンジンバージョンをアップグレードするをご参照ください。
インスタンスで MySQL 互換機能が有効になっていること。 詳細については、MySQL 互換機能を有効にするをご参照ください。
クライアントの IP アドレスが Lindorm インスタンスのホワイトリストに追加されていること。 詳細については、ホワイトリストを設定するをご参照ください。
手順
Go プロジェクトの go.mode ファイルに、GORM の依存関係を追加します。
require ( gorm.io/driver/mysql v1.5.1 gorm.io/gorm v1.25.4 )接続パラメータを設定します。
dsn := "<user>:<password>@tcp(<lidnorm_mysql_url>:33060)/<database>"パラメータ
password
パラメータ
説明
user
パスワードを忘れた場合は、LindormTable のクラスタ管理システムでパスワードを変更できます。 詳細については、ユーザーの管理をご参照ください。
LindormTable にアクセスするために使用するパスワード。
lindorm_mysql_url
[lindormtable エンドポイント(mysql 用)]。エンドポイントの取得方法については、[エンドポイントの表示] をご参照ください。
重要アプリケーションが ECS インスタンスにデプロイされている場合は、セキュリティを強化し、ネットワークレイテンシを低減するために、VPC を使用して Lindorm インスタンスに接続することをお勧めします。
アプリケーションがローカルサーバーにデプロイされていて、インターネット経由で Lindorm インスタンスに接続する必要がある場合は、Lindorm コンソールでインスタンスのインターネットエンドポイントを有効にするために、次の手順を実行できます。左側のナビゲーションペインで、 を選択します。[ワイドテーブルエンジン] タブで、[パブリックエンドポイントを有効にする] をクリックします。
VPC を使用して Lindorm インスタンスにアクセスする場合は、lindorm_mysql_url の値に [lindormtable VPC エンドポイント For Mysql] を指定します。インターネットを使用して Lindorm インスタンスにアクセスする場合は、lindorm_mysql_url の値に [lindormtable インターネットエンドポイント For Mysql] を指定します。
database
接続先のデータベースの名前。 デフォルトでは、クライアントは default という名前のデータベースに接続されます。
接続を確立し、LindormTable SQL を使用して LindormTable で操作を実行します。 次のコードブロックは、LindormTable SQL を使用してテーブルを作成する方法の例を示しています。
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic(err) } // 注意: LindormTable はトランザクションをサポートしていないため、トランザクションを無効にします。 session := db.Session(&gorm.Session{SkipDefaultTransaction: true}) // Product という名前のテーブルを作成します。 err = session.Migrator().CreateTable(&Product{}) if err != nil { panic(err) }
サンプルコード
次のコードは、GORM ライブラリを使用して LindormTable に接続し、使用する方法の完全な例を示しています。
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// テーブルのフィールドと GORM の対応する要素間のマッピング関係を定義します。
type Product struct {
// ID 列をプライマリキーとして指定します。 LindormTable では自動インクリメントがサポートされていないため、自動インクリメントを false に設定します。
ID int64 `gorm:"primaryKey;autoIncrement:false"`
// 文字列データ型を GORM の varchar にマップします。 そうしないと、longtext データ型は列でサポートされません。
Code string `gorm:"type:varchar"`
Price float64
}
func main() {
// user を LindormTable にアクセスするために使用するユーザー名に設定します。
// password を LindormTable にアクセスするために使用するパスワードに設定します。
// lindorm_mysql_url を MySQL 用の LindormTable エンドポイントに設定します。
// database を接続先のデータベースに設定します。
dsn := "user:test@tcp(ld-uf6k8yqb741t3****-proxy-sql-lindorm.lindorm.rds.aliyuncs.com:33060)/default"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
// 注意: LindormTable はトランザクションをサポートしていないため、トランザクションを無効にします。
session := db.Session(&gorm.Session{SkipDefaultTransaction: true})
// テーブルを作成します。
err = session.Migrator().CreateTable(&Product{})
if err != nil {
panic(err)
}
// ID 列の値が 1 のデータ行をテーブルに書き込みます。
tx := session.Debug().Create(&Product{ID: 1, Code: "D42", Price: 100.1})
err = tx.Error
if err != nil {
panic(err)
}
// ID 列の値が 2 のデータ行をテーブルに書き込みます。
tx = session.Debug().Create(&Product{ID: 2, Code: "B41", Price: 105.5})
err = tx.Error
if err != nil {
panic(err)
}
var product1 Product
// ID 列の値が 1 のデータをクエリします。
session.Debug().First(&product1, 1) // プライマリキーの値が 1 のデータをクエリします。
fmt.Println(product1)
var product2 Product
// ID 列の値が 2 のデータをクエリします。
session.Debug().First(&product2, "code = ?", "B41") // Code 列の値が B41 のデータをクエリします。
fmt.Println(product2)
// ID 列の値が 1 のデータで、Price 列の値を 101.8 に更新します。
session.Debug().Model(&Product{}).Where("id = ?", 1).Update("price", 101.8)
product1 = Product{}
// プライマリキー値が 1 のデータをクエリします。
session.Debug().First(&product1, 1)
fmt.Println(product1)
// プライマリキー値が 1 のデータの値を削除します。
session.Delete(&Product{}, 1)
product1 = Product{}
session.Debug().First(&product1, 1)
fmt.Println(product1)
}上記のコードを実行すると、次のクエリ結果を含むログが返されます。
{1 D42 100.1}
{2 B41 105.5}
{1 D42 101.8}
{0 0}