本ドキュメントでは、Go-SQL-Driver/MySQL ドライバと OceanBase Cloud クラウドデータベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、データのクエリなどの基本操作を実装する方法について説明します。
前提条件
OceanBase Cloud クラウドデータベースインスタンスの作成、Go 言語および関連ドライバのインストールを行い、環境変数が正しく設定されていることを確認します。
- OceanBase Cloud クラウドデータベースのアカウントを登録し、クラスタインスタンスと MySQL互換モード のテナントを作成していること。詳細は クラスタインスタンスの作成 および テナントの作成をご参照ください。
- Go 言語のインストール
- Go-SQL-Driver/MySQL ドライバのインストール
操作手順
説明
本ドキュメントに記載されている手順は、Windows 環境で作成されたものです。他のオペレーティングシステム環境やコンパイラを使用している場合、手順が若干異なる場合があります。
- (オプション) Go 言語とドライバをインストールします。
- OceanBase Cloud クラウドデータベースの接続情報を取得します。
go-oceanbaseプロジェクト内のデータベース接続情報を変更します。go-oceanbaseプロジェクトを実行します。
操作手順 1: (オプション) Go 言語とドライバのインストール
すでに Go 言語と Go-SQL-Driver/MySQL ドライバをインストールしている場合は、この手順をスキップできます。インストールしていない場合は、以下の手順に従ってインストールしてください。
Go 言語のインストール
Go 言語インストールパッケージのダウンロード: Go公式サイト から、ご使用のオペレーティングシステムに適したインストールパッケージをダウンロードできます。
説明
本ドキュメントで使用する Go インストールパッケージ名は go1.20.6.windows-amd64.msi です。
Go 言語のインストール: ダウンロードしたインストールパッケージをダブルクリックし、プロンプトに従ってインストールします。
環境変数の設定: Go 言語のインストールパスをシステムの PATH 環境変数に追加します。
Windows 環境では、コントロールパネル > システムとセキュリティ > システム > システムの詳細設定 > 環境変数 > システム変数 で、Path の値に
C:\usr\local\go\binを追加します。Linux または macOS 環境では、
~/.bashrcまたは~/.bash_profileファイルを編集し、以下の内容を追加します。export PATH=$PATH:/usr/local/go/bin
説明
\usr\local\go\binはデフォルトのインストールディレクトリです。Go 言語のインストール時にインストールディレクトリを変更した場合は、対応するディレクトリに置き換えてください。インストールの検証: Shell コマンドラインで以下のコマンドを入力し、Go 言語のバージョン情報を確認して、インストールが成功したかどうかを検証します。
C:\Users\admin\> go version go version go1.20.6 windows/amd64
Go-SQL-Driver/MySQL ドライバのインストール
Go 言語のバージョンに応じて、異なるインストール方法を選択できます。Go-SQL-Driver/MySQL ドライバをインストールする際は、対応するプロジェクトディレクトリに移動してコマンドライン端末を開く必要があります。
Go-SQL-Driver/MySQLの詳細については、Github をご参照ください。インストールコマンドは以下の通りです。
C:\Users\admin\Desktop\go-oceanbase>go get -u github.com/go-sql-driver/mysql go: downloading github.com/go-sql-driver/mysql v1.7.1 go: added github.com/go-sql-driver/mysql v1.7.1バージョンやネットワークの理由で
go getコマンドによるインストールができない場合は、go installコマンドを使用してgo-sql-driver/mysqlをインストールできます。go/srcディレクトリで github のgo-sql-driver/mysqlリポジトリをクローンします。cd /usr/local/go/src git clone https://github.com/go-sql-driver/mysql.git注意
/usr/local/go/srcは、実際の Go インストールディレクトリに置き換えて操作する必要があります。go installを使用してインストールします。go install mysql注意
一部のバージョンでは、
go installのデフォルト実行ディレクトリが/srcではない場合があります。go install実行後のエラーメッセージから実際のディレクトリを判断できます。例えば、cannot find package "mysql" in: /usr/local/go/src/vendor/mysqlというエラーが出た場合、mysql フォルダを/src/vendorディレクトリに配置してからインストールコマンドを実行する必要があります。Go-SQL-Driver/MySQL ドライバがインストールされているか確認します。インストールに失敗した場合は、エラーメッセージに従って修正してください。
go list -m github.com/go-sql-driver/mysql
操作手順 2: OceanBase Cloud クラウドデータベースの接続情報の取得
OceanBase Cloudコンソール にログインします。インスタンス一覧ページで対象インスタンスの情報を展開し、対象テナントの下で 接続 > 接続文字列を取得 を選択します。
詳細な操作については、接続文字列の取得 をご参照ください。
作成済みの OceanBase Cloud クラウドデータベースに基づいて、以下の URL の対応する情報を入力します。
obclient -h{host} -u{username} -p****** -P{port} -D{schema_name}データベース接続文字列には、データベースへのアクセスに必要なパラメータ情報が含まれています。データベース接続文字列を使用してデータベースへのログインを検証し、接続文字列のパラメータ情報が正しいことを確認できます。
説明
test.goファイルでは、ここの URL 情報が必要です。パラメータの説明:
host: OceanBase Cloud クラウドデータベースの接続アドレスを指定します。例:t********.********.oceanbase.cloud。user_name: データベースにアクセスするためのアカウントを指定します。password: アカウントのパスワードを指定します。port: OceanBase Cloud クラウドデータベースの接続ポートを指定します。デフォルトは 3306 です。schema_name: アクセスする Schema 名を指定します。
操作手順 3: go-oceanbase プロジェクト内のデータベース接続情報の変更
手順 2: OceanBase Cloud クラウドデータベースの接続情報の取得 の情報に基づいて、test.go ファイル内のデータベース接続情報を変更します。test.go ファイルを選択し、右クリックして プログラムから開く を選択し、メモ帳 またはその他の編集ソフトウェアで開くことができます。
例は以下の通りです:
- データベースのアクセスアドレスは
t********.********.oceanbase.cloudです。 - アクセスポートは 3306 を使用します。
- アクセスする Schema 名は
testです。 - テナントの接続アカウントは
mysql001です。 - パスワードは
******です。
サンプルコードは以下の通りです:
conn := "mysql001:******@tcp(t********.********.oceanbase.cloud:3306)/test"
操作手順 4: go-oceanbase プロジェクトの実行
コードの編集が完了したら、プロジェクトディレクトリでコマンドライン端末を開き、go run を使用して Go ファイルを直接実行します。以下のコマンドを実行します。
```shell
C:\Users\admin\Desktop\go-oceanbase>go run test.go
```
(オプション) Linux または macOS 環境では、一時的な環境変数を設定してから go run を実行する必要があります。
```shell
export PATH=$PATH:/usr/local/go/bin
go run test.go ```
実行後に以下の内容が返された場合、データベース接続が成功し、サンプル文が正しく実行されたことを示します。
説明
この内容は、「テーブル t1 の削除」実行後の結果を非表示にしたものです。
```shell
C:\Users\admin\Desktop\go-oceanbase>go run test.go
success to connect OceanBase with go_mysql driver Hello OceanBase ```
プロジェクトコードの紹介
go-oceanbase をクリックしてプロジェクトコードをダウンロードします。これは go-oceanbase という名前の圧縮パッケージです。
解凍すると、go-oceanbase という名前のフォルダが作成されます。ディレクトリ構造は以下の通りです。
|-- go.mod
|-- go.sum
|-- test.go
ファイルの説明:
go.mod: Go 言語モジュールファイル。プロジェクトのモジュール依存関係とバージョン情報を定義するために使用されます。go.sum: Go V1.11 以降で追加されたモジュール管理ファイル。プロジェクトが依存するモジュールとそのバージョン情報、および対応するチェックサム (Checksum) を記録するために使用されます。test.go: Go ソースコードファイル。プロジェクトのサンプルコードが含まれています。
go.mod コードの紹介
go.mod ファイルは、プロジェクトのモジュール名、Go バージョン番号、および依存関係の宣言を定義するために使用されます。
go.mod ファイルには以下の内容が含まれます。
module go-oceanbase: これはプロジェクトのモジュール名であり、プロジェクトの名前空間を定義します。Go 1.16 以降では、モジュール名はプロジェクトのルートディレクトリ名と一致する必要があります。go 1.20: これはプロジェクトに必要な Go バージョンです。require github.com/go-sql-driver/mysql v1.7.1 // indirect: これはプロジェクトの依存関係の宣言です。プロジェクトに必要なgithub.com/go-sql-driver/mysqlモジュールのバージョンが V1.7.1 であること、およびこの依存関係が間接的な依存関係であり、別の依存関係go.sumに関連付けられていることを指定します。
go.sum コードの紹介
go.sum ファイルは、プロジェクトが正しい依存関係バージョンを使用するように、github.com/go-sql-driver/mysql 依存関係のバージョン情報を定義するために使用されます。
go.sum ファイルには以下の内容が含まれます。
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=モジュールのソースコードファイルのハッシュ値。プロジェクトのビルド時に正しいバージョンが使用されることを保証するために使用されます。ここでのハッシュ値はlUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=です。github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=モジュールの依存関係ファイルのハッシュ値。プロジェクトのビルド時に正しい依存関係バージョンが使用されることを保証するために使用されます。ここでのハッシュ値はOXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=です。
test.go コードの紹介
test.go ファイルは、Go 言語と OceanBase Cloud クラウドデータベースの MySQLモード を使用して対話する方法を定義しています。これには、データベースへの接続、テーブルの作成、データの挿入、データのクエリ、テーブルの削除などの操作が含まれます。 test.go ファイルには以下の内容が含まれます。
mainパッケージの定義。package mainは、これが実行可能プログラムのパッケージであることを示します。このパッケージにはmain()関数が含まれており、この関数はプログラムの実行時に実行されます。importパッケージの定義。
import 文は以下の 4 つのパッケージをインポートします。
* `database/sql`: 汎用的な SQL データベースアクセスインターフェースを提供するために使用されます。さまざまなタイプの SQL データベースに接続して操作するための汎用的なインターフェースと関数のセットを定義します。
fmt: フォーマットされた入出力を提供する関数を提供するために使用されます。データを文字列としてフォーマットし、コンソールやその他のデバイスに出力するための関数のセットを定義します。log: ログを記録する関数を提供するために使用されます。ログ情報をコンソールやその他のデバイスに出力するための関数のセットを定義します。github.com/go-sql-driver/mysql: MySQLモード のドライバを提供するために使用されます。Go 言語で MySQLモード に接続して操作できるように、database/sqlパッケージで定義されたインターフェースを実装します。ここでは、正しいgo-sql-driver/mysqlのインストールパスを入力する必要があります。
コードは以下の通りです:
```go
import (
database/sql
fmt log
_ "github.com/go-sql-driver/mysql"
// go-sql-driver/mysqlのインストールパスを指定します。 ) ```
Str構造体の定義。 クエリ結果を格納するためのフィールドNameを含みます。main()関数を定義し、その中のselectAll()関数を使用して、テーブルの作成、データの挿入、データのクエリ、テーブルの削除などの操作を完了します。
コードは以下の通りです:
```go
type Str struct {
Name string
}
func main() {
selectAll()
}
````
selectAll()関数の定義。selectAll()関数には、データベースへの接続、テーブルの作成、データの挿入、データのクエリ、テーブルの削除などの操作が含まれます。データベースへの接続。 MySQLモード の接続パラメータ (ユーザー名、パスワード、IP アドレス、ポート番号、データベース名などの情報) を含む接続文字列
connを定義します。sql.Open()関数を呼び出してデータベース接続を開き、エラーが発生した場合はログを記録してプログラムを終了します。deferキーワードを使用してデータベース接続を遅延して閉じ、関数終了時に接続が確実に閉じられるようにします。
コードは以下の通りです:
```go
conn := "user_name:******@tcp(host:port)/schema_name"
// データベース接続パラメータ
db, err := sql.Open("mysql", conn)
if err != nil {
log.Fatal(err)
}
```
2. コンソールへのメッセージ出力。
`defer` キーワードを使用して `db.Close()` 関数を遅延実行し、関数終了時にデータベース接続が確実に閉じられるようにします。`fmt.Printf()` 関数を使用して、接続成功のメッセージをコンソールに出力します。
コードは以下の通りです:
```go
defer db.Close()
if err != nil {
log.Fatal(err)
}
fmt.Printf("success to connect OceanBase with go_mysql driver\n")
```
- データの作成。
t1という名前のテーブルを作成し、長さ256の文字列型フィールドstrを設定します。
コードは以下の通りです:
```go
_, err = db.Query("create table t1(str varchar(256))")
if err != nil {
log.Fatal(err)
}
```
- データの挿入。 テーブル
t1に 1 行のデータを挿入し、その行のstrフィールドの値をHello OceanBaseに設定します。
コードは以下の通りです:
```go
_, err = db.Query("insert into t1 values ('Hello OceanBase')")
if err != nil {
log.Fatal(err)
}
```
- データのクエリ。 テーブル
t1内のすべてのデータをクエリし、クエリ結果を変数resに代入します。クエリに失敗した場合は、エラーメッセージを返します。
コードは以下の通りです:
```go
res, err := db.Query("SELECT * FROM t1")
if err != nil {
log.Fatal(err)
}
defer res.Close()
for res.Next() {
var str Str
res.Scan(&str.Name)
fmt.Printf("%s\n", str.Name)
}
```
- データの削除。 テーブル
t1を削除します。削除に失敗した場合は、エラーメッセージを返します。
コードは以下の通りです:
```go
_, err = db.Query("drop table t1")
if err != nil {
log.Fatal(err)
}
```
完全なコードの表示
module go-oceanbase
go 1.20
require github.com/go-sql-driver/mysql v1.7.1 // indirect
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
package main
import (
database/sql
fmt
log
_ "github.com/go-sql-driver/mysql"
// go-sql-driver/mysqlのインストールパスを指定します。
)
type Str struct {
Name string
}
func main() {
selectAll()
}
func selectAll() {
conn := "user_name:******@tcp(host:port)/schema_name"
// データベース接続パラメータ
db, err := sql.Open("mysql", conn)
if err != nil {
log.Fatal(err)
}
defer db.Close()
if err != nil {
log.Fatal(err)
}
fmt.Printf("success to connect OceanBase with go_mysql driver\n")
// t1テーブルを作成
_, err = db.Query("create table t1(str varchar(256))")
if err != nil {
log.Fatal(err)
}
// データを挿入
_, err = db.Query("insert into t1 values ('Hello OceanBase')")
if err != nil {
log.Fatal(err)
}
// データを照会
res, err := db.Query("SELECT * FROM t1")
if err != nil {
log.Fatal(err)
}
defer res.Close()
for res.Next() {
var str Str
res.Scan(&str.Name)
fmt.Printf("%s\n", str.Name)
}
// t1テーブルを削除
_, err = db.Query("drop table t1")
if err != nil {
log.Fatal(err)
}
}
関連情報
Go-SQL-Driver/MySQL に関する内容は、OceanBase データベースのオープンソースコミュニティにも詳細情報があります。詳細は Go-SQL-Driver/MySQL をご参照ください。