本記事では、Go-SQL-Driver/MySQLドライバーとOceanBaseデータベースを使用してアプリケーションを構築し、テーブルの作成、データの挿入、クエリなどの基本的な操作を実行する方法を紹介します。
前提条件
OceanBaseデータベース、Go言語、および関連するドライバーをインストールし、環境変数が正しく設定されていること。
- OceanBaseデータベースがインストールされていること
- Go言語がインストールされていること
- Go-SQL-Driver/MySQLドライバーがインストールされていること
操作手順
説明
本記事で示されている操作手順は、Windows環境で生成されたものです。他のOS環境やコンパイラを使用している場合は、操作手順が若干異なる場合があります。
- (オプション)Go言語とドライバーをインストールします。
- OceanBaseデータベース接続情報を取得します。
go-oceanbaseプロジェクトのデータベース接続情報を修正します。go-oceanbaseプロジェクトを実行します。
ステップ1:(オプション)Go言語とドライバーをインストールする
Go言語とGo-SQL-Driver/MySQLドライバーがインストール済みの場合は、この手順はスキップできます。インストールされていない場合は、以下の手順に従ってインストールすることができます。
Go言語をインストールする
Go言語のインストールパッケージをダウンロードします:Go公式Webサイト から、ご自身のOSに適したインストールパッケージをダウンロードできます。
説明
この記事で使用する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をインストールできます。githubの
go-sql-driver/mysqlリポジトリをgo/srcディレクトリにクローンします。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データベース接続情報を取得する
OceanBaseデータベースのデプロイ担当者または管理者に連絡して、該当するデータベース接続文字列を取得します。
obclient -h{host} -u{username} -p****** -P{port} -D{schema_name}
データベース接続文字列には、データベースへのアクセスに必要なパラメータ情報が含まれています。この接続文字列を使用して、データベースへのログインを検証し、接続文字列のパラメータ情報が正しいことを確認できます。
説明
test.go ファイルには、このURL情報が必要です。
パラメータの説明:
host:OceanBaseデータベースへの接続IPアドレス。ODP接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。user_name:テナントの接続アカウント。ODP接続の一般的な形式:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。password:アカウントのパスワード。port:OceanBaseデータベースの接続ポートを提供します。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズすることができます。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズすることができます。schema_name:アクセスするスキーマ名です。
ステップ3: go-oceanbase プロジェクトのデータベース接続情報を修正する
ステップ2:OceanBaseデータベース接続情報を取得する に記載されている情報に基づいて、test.go ファイル内のデータベース接続情報を修正します。test.go ファイルを選択し、右クリックして 開く方法 を選択すると、メモ帳 またはその他のエディタで開くことができます。

例:
- OBServerノードのIPアドレスは
10.10.10.1です。 - アクセスポートは2881を使用します。
- アクセスするスキーマ名は
testです。 - テナントの接続アカウントは
root@mysqlです。root@mysqlはOceanBaseデータベースで作成されたMySQLモデルのユーザーテナントであり、testはテナントroot@mysqlのユーザー名です。 - パスワードは
******です。
サンプルコードは以下のとおりです:
conn := "root@mysql:******@tcp(10.10.10.1:2881)/test"
ステップ4:go-oceanbase プロジェクトを実行する
コードの編集が完了したら、プロジェクトディレクトリでコマンドラインターミナルを開き、go run でGoファイルを以下のとおり実行します:
C:\Users\admin\Desktop\go-oceanbase>go run test.go
(オプション)LinuxまたはmacOS環境では、一時的な環境変数を設定してからでないと go run を実行できません。
export PATH=$PATH:/usr/local/go/bin
go run test.go
実行後、以下の内容が返された場合は、データベースへの接続に成功し、サンプルステートメントが正しく実行されたことを意味します:
説明
この内容は、「テーブルt1の削除」を実行した後の結果をマスクしたものです。
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データベースのMySQLモードを使用して、データベースへの接続、テーブルの作成、データの挿入、データのクエリ、テーブルの削除などの操作を含むインタラクションする方法を定義しています。 test.go ファイルには、以下の内容が含まれています:
mainパッケージを定義します。package mainは、実行可能なプログラムのパッケージであることを示します。このパッケージにはmain()関数が含まれており、プログラムの実行時にこの関数が実行されます。importパッケージを定義します。importステートメントで、以下の4つのパッケージをインポートしています:database/sql:汎用のSQLデータベースアクセスインターフェースを提供するために使用されます。それは、さまざまな種類のSQLデータベースに接続し操作するための汎用のインターフェースと関数のセットを定義しています。fmt:フォーマットされた入出力の提供に使用される関数です。これは、データを文字列形式にフォーマットしてコンソールやその他のデバイスに出力するための一連の関数を定義しています。log:レコードログを提供するための関数です。それは、ログ情報をコンソールや他のデバイスに出力するための一連の関数を定義しています。github.com/go-sql-driver/mysql:MySQLモードを提供するためのドライバーです。それはdatabase/sqlパッケージで定義されたインターフェースを実装しており、Go言語でMySQLモードに接続して操作できるようになっています。ここでは正しいgo-sql-driver/mysqlのインストールパスを記入する必要があります。
コードは以下のとおりです:
import ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql" // go-sql-driver/mysqlのインストールパスを記入してください。 )Str構造体を定義します。 フィールドNameを含み、クエリ結果をストレージするために使用されます;main()関数が定義されており、その中にselectAll()関数が含まれていて、テーブルの作成、データの挿入、データのクエリ、テーブルの削除などの操作を完了するために使用されます。コードは以下のとおりです:
type Str struct { Name string } func main() { selectAll() }selectAll()関数を定義します。selectAll()関数は、データベースへの接続、テーブルの作成、データの挿入、データのクエリ、テーブルの削除などの操作を含んでいます。データベースに接続します。 接続文字列
connを定義し、ユーザー名、パスワード、IPアドレス、ポート番号、データベース名などの情報を含むMySQLモードの接続パラメータが含まれています。sql.Open()関数を呼び出してデータベース接続を開き、エラーが発生した場合はログを記録してプログラムを終了します。deferキーワードを使用してデータベース接続のクローズを遅延させ、関数の終了時に接続が閉じられることを保証します。コードは以下のとおりです:
conn := "user_name:******@tcp(host:port)/schema_name" // データベース接続パラメータ db, err := sql.Open("mysql", conn) if err != nil { log.Fatal(err) }コンソールにメッセージを出力します。
deferキーワードを使用してdb.Close()関数の実行を遅延させ、関数の終了時にデータベース接続を閉じることを保証します。fmt.Printf()関数を使用して、接続成功のメッセージをコンソールに出力します。コードは以下のとおりです:
defer db.Close() if err != nil { log.Fatal(err) } fmt.Printf("success to connect OceanBase with go_mysql driver\n")データを作成します。
t1という名前のテーブルを作成し、長さ256の文字列タイプのフィールドstrを設定しました。コードは以下のとおりです:
_, err = db.Query("create table t1(str varchar(256))") if err != nil { log.Fatal(err) }データを挿入します。 テーブル
t1に1行のデータを挿入し、その行データのstrフィールドの値をHello OceanBaseに設定します。コードは以下のとおりです:
_, err = db.Query("insert into t1 values ('Hello OceanBase')") if err != nil { log.Fatal(err) }データをクエリします。 テーブル
t1のすべてのデータをクエリし、クエリ結果を変数resに代入します。クエリが失敗した場合、エラーメッセージを返します。コードは以下のとおりです:
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) }
全コード表示
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を参照してください。
クリックしてgo-oceanbaseサンプルプロジェクトをダウンロードします