このトピックでは、Go-MySQL-Driver と OceanBase Database を使用して、テーブルの作成、データの挿入、データのクエリなどの基本的なデータベース操作を実行するアプリケーションを構築する方法について説明します。
go-oceanbase サンプルプロジェクトをダウンロードする
前提条件
以下の準備を完了し、対応する環境変数を正しく構成していること。
OceanBase Database をインストールする
Go をインストールする
Go-MySQL-Driver をインストールする
手順
このトピックで提供される手順は、Windows 環境用です。別のオペレーティングシステムまたはコンパイラを使用している場合、手順は多少異なる場合があります。
(オプション) Go と Go-MySQL-Driver をインストールします。
OceanBase Database の接続情報を取得します。
プロジェクトのデータベース接続情報を変更します。
go-oceanbaseプロジェクト。プロジェクトを実行します。
go-oceanbaseプロジェクト。
手順 1: (オプション) Go と Go-MySQL-Driver をインストールする
Go と Go-MySQL-Driver をインストール済みの場合は、この手順をスキップしてください。インストールしていない場合は、以下の操作を実行します。
Go をインストールします。
お使いのオペレーティングシステムに適した Go インストールパッケージを Go 公式 Web サイトからダウンロードします。
説明このトピックで使用されているインストールパッケージは、go1.20.6.windows-amd64.msi です。
インストールパッケージをダブルクリックし、ウィザードに従って Go をインストールします。
Go のインストールパスをシステムの Path 環境変数に追加します。
Windows 環境では、[コントロール パネル] > [システムとセキュリティ] > [システム] > [システムの詳細設定] > [環境変数] > [システム環境変数] を追加します
C:\usr\local\go\bin。Linux または macOS 環境では、 または ファイルに次の内容を追加します。
~/.bashrcまたは~/.bash_profileファイル:export PATH=$PATH:/usr/local/go/bin
説明ここで、
\usr\local\go\binは Go のデフォルトのインストールディレクトリです。Go をインストールするときに別のディレクトリを選択した場合は、デフォルトのディレクトリを実際のディレクトリに置き換えてください。コマンドライン端末で次のコマンドを実行して Go のバージョンを確認し、インストールを検証します。
C:\Users\admin\> go version go version go1.20.6 windows/amd64
Go-MySQL-Driver をインストールします。
Go のバージョンに応じて異なる方法で Go-MySQL-Driver をインストールできます。Go-MySQL-Driver をインストールするには、プロジェクトディレクトリでコマンドラインターミナルを開く必要があります。Go-MySQL-Driver の詳細については、
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-sql-driver/mysqlリポジトリを GitHub から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 バージョンでは、 コマンドのデフォルトの実行ディレクトリが でない場合があります。 コマンドを実行した後に報告されるエラーに基づいて、正しいディレクトリを判断できます。たとえば、 エラーが報告された場合は、mysql フォルダを ディレクトリに配置してから、コマンドを再実行する必要があります。
go installコマンドが/src。実行後に報告されるエラーに基づいて、正しいディレクトリを特定できます。go installコマンド。たとえば、/usr/local/go/src/vendor/mysql にパッケージ "mysql" が見つかりませんエラーが報告された場合は、mysql フォルダを/src/vendorディレクトリに移動してから、コマンドを再実行してください。Go-MySQL-Driver がインストールされているかどうかを確認します。インストールに失敗した場合は、エラーメッセージに基づいて修正してください。
go list -m github.com/go-sql-driver/mysql
手順 2: OceanBase Database の接続情報を取得する
OceanBase Database のデプロイエンジニアまたは管理者に連絡して、データベース接続文字列を取得します。
obclient -h{host} -u{username} -p****** -P{port} -D{schema_name}データベース接続文字列には、OceanBase Database にアクセスするために必要なパラメータが含まれています。データベース接続文字列を使用して OceanBase Database にログインし、パラメータが正しいことを確認できます。
ここで取得した URL は、test.go ファイルで必要になります。
パラメータの説明は次のとおりです。
host: OceanBase Database に接続するための IP アドレス。user_name: テナントアカウントのユーザー名です。password: テナントアカウントのパスワード。port: OceanBase Database に接続するためのポートです。デフォルトのポートは 3306 です。schema_name: アクセスするスキーマの名前です。
手順 3: データベース接続情報を変更するgo-oceanbaseプロジェクト
データベース接続情報を test.go で取得した情報に基づくファイル手順 2:OceanBase Database の接続情報を取得する を選択して右クリックします。test.go ファイルを選択し、[開く]を選択し、メモ帳または別のエディターを使用してファイルを開きます。
例:
OBServer ノードの IP アドレスは
xxx.xxx.xxx.xxxです。ポートは 3306 です。
アクセスするスキーマの名前は
testです。テナントアカウントのユーザー名は、
rootです。テナントアカウントのパスワードは
******です。
接続文字列の例は次のとおりです。
conn := "root:******@tcp(xxx.xxx.xxx.xxx:3306)/test"手順 4: を実行するgo-oceanbaseプロジェクト
必要に応じてコードを変更した後、プロジェクトディレクトリでコマンドライン端末を開き、 コマンドを入力して Go ファイルを実行します。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次の情報が返された場合、OceanBase Database に接続されており、サンプルプロジェクトは正しく実行されています。
この結果は、テーブル 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 1.11 以降のモジュール管理ファイルです。 プロジェクトの他のモジュールおよびモジュールのバージョンへの依存関係、および対応するチェックサムが記録されます。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: プロジェクトの依存関係宣言。プロジェクトがバージョン 1.7.1 の : プロジェクトの依存関係宣言です。プロジェクトがgithub.com/go-sql-driver/mysqlモジュールに依存しており、依存関係が モジュール バージョン 1.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 ファイルでは、OceanBase Database の MySQL モードと Go を使用してやり取りする方法について定義しています。これには、データベースへの接続、テーブルの作成、データの挿入、データのクエリ、テーブルの削除などの操作が含まれます。 test.go ファイルを構成するには、次の手順を実行します。
定義します
メインパッケージ。package main<executable> タグは、このパッケージが実行可能なプログラムパッケージであり、<executable> タグが含まれていることを示します。main()関数。この関数は、プログラムの実行時に実行されます。インポート
importパッケージを定義します。import文は、次の 4 つの パッケージ をインポートします。database/sql: 共通の SQL データベースアクセスインターフェイスを提供します。さまざまな種類の SQL データベースに接続して操作するための一連の共通インターフェイスと関数を定義します。fmt: 入出力のフォーマットを行うための関数を備えています。 データを文字列にフォーマットし、コンソールまたは他のデバイスに出力するための一連の関数を定義します。log: ロギング機能を提供します。コンソールまたはその他のデバイスへのログ出力のための一連の関数を定義します。github.com/go-sql-driver/mysql: MySQL モードのドライバーを提供します。これは、Go を使用して OceanBase Database の MySQL モードに接続して操作するために、database/sqlパッケージで定義されているインターフェースを実装しています。 ここでgo-sql-driver/mysqlの正しいインストール パスを指定する必要があります。
サンプルコードは次のとおりです。
import ( "database/sql" "fmt" "log" _ "github.com/go-sql-driver/mysql" // go-sql-driver/mysql のインストールパスを指定します。 )を定義します
文字列構造体。 この構造体には、名前クエリ結果を格納するためのフィールド。構造体で、main()関数で、selectAll()テーブルの作成、データの挿入、データのクエリ、およびテーブルの削除を行う関数。サンプルコードは次のとおりです。
type Str struct { Name string } func main() { selectAll() }定義する
selectAll()関数。selectAll()関数は、データベースへの接続、テーブルの作成、データの挿入、データのクエリ、およびテーブルの削除の操作を含みます。データベースに接続します。接続文字列 を定義します。これには、OceanBase Database の MySQL モードの接続パラメータ(ユーザー名、パスワード、IP アドレス、ポート番号、データベース名など)が含まれています。 関数を呼び出して、データベース接続を開きます。エラーが発生した場合は、エラーをログに記録してプログラムを終了します。 キーワードを使用して、データベース接続のクローズを遅延させます。これにより、関数が実行された後に接続がクローズされます。
接続、MySQL モードの OceanBase データベースへの接続パラメーター(ユーザー名、パスワード、IP アドレス、ポート番号、データベース名を含む)が格納されています。sql.Open()`open_connection()` 関数を使用してデータベース接続を開きます。エラーが発生した場合は、エラーをログに記録し、プログラムを終了します。`open_connection()` を使用します。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が含まれている文字列フィールドのvarchar(256)タイプ。サンプルコードは次のとおりです。
_, err = db.Query("create table t1(str varchar(256))") if err != nil { log.Fatal(err) }データを挿入します。 が である行を テーブルに挿入します。
文字列はHello OceanBaseをt1テーブル。サンプルコードは次のとおりです。
_, err = db.Query("insert into t1 values ('Hello OceanBase')") if err != nil { log.Fatal(err) }events
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) }テーブルを削除します。
t1table。操作が失敗した場合は、エラーメッセージを返します。サンプルコードは次のとおりです。
_, err = db.Query("drop table t1") if err != nil { log.Fatal(err) }
完全なコード例
go.mod
module go-oceanbase
go 1.20
require github.com/go-sql-driver/mysql v1.7.1 // indirect
go.sum
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=test.go
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-MySQL-Driver の詳細については、「Go-MySQL-Driver」をご参照ください。go-sql-driver/mysql GitHub 上。