Go ドライバー (aliyun-tablestore-go-sql-driver) は database/sql/driver インターフェイスを実装しており、標準の database/sql パッケージを介して Tablestore データにアクセスできます。
前提条件
RAM ユーザーに必要な
ots:SQL*権限を持つ AccessKey ペア。データテーブルとマッピングテーブル。 詳細については、「DDL 操作」をご参照ください。
操作手順
ステップ 1: Go ドライバーのインストール
次のコマンドを実行して Go ドライバーをインストールします。
go get github.com/aliyun/aliyun-tablestore-go-sql-driverステップ 2: Go ドライバーでの接続
パラメーター
Go ドライバーで Tablestore にアクセスするには、ドライバー名とデータソース名 (DSN) を指定します。
パラメーター | 説明 |
driverName | Tablestore の Go ドライバー名。 これを |
dataSourceName | DSN は
その他の設定オプションについては、「設定オプション」をご参照ください。 |
例
import (
"database/sql"
_ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)
// Go ドライバー名と Tablestore のデータソース名を設定します。
db, err := sql.Open("ots", "https://access_key_id:access_key_secret@endpoint/instance_name")
if err != nil {
panic(err) // エラーを処理します。
}ステップ 3: データのクエリ
Query メソッドでクエリを実行するか、Prepare メソッドでプリペアドステートメントを使用します。
変数の型は Tablestore のデータ型と一致させる必要があります。 型マッピングについては、「データ型のマッピング」をご参照ください。
Query
rows, err := db.Query("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?", 3)
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var pk1 int64
var col1 float64
var col2 string
if err := rows.Scan(&pk1, &col1, &col2); err != nil {
panic(err)
}
fmt.Println(pk1, col1, col2)
}Prepare
stmt, err := db.Prepare("SELECT pk1, col1, col2 FROM test_table WHERE pk1 = ?")
if err != nil {
panic(err)
}
defer stmt.Close()
rows, err := stmt.Query(3)
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var pk1 int64
var col1 float64
var col2 string
if err := rows.Scan(&pk1, &col1, &col2); err != nil {
panic(err)
}
fmt.Println(pk1, col1, col2)
}完全な例
次の例では、Tablestore インスタンスに接続し、test_table からすべてのデータをクエリします。
package main
import (
"database/sql"
"fmt"
_ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)
func main() {
db, err := sql.Open("ots", "https://************************:********************************@myinstance.cn-hangzhou.ots.aliyuncs.com/myinstance")
if err != nil {
panic(err)
}
defer db.Close()
rows, err := db.Query("SELECT * FROM test_table")
if err != nil {
panic(err)
}
defer rows.Close()
columns, _ := rows.Columns()
for rows.Next() {
values := make([]interface{}, len(columns))
pointers := make([]interface{}, len(columns))
for i := range values {
pointers[i] = &values[i]
}
if err := rows.Scan(pointers...); err != nil {
panic(err)
}
fmt.Println(values...)
}
}設定オプション
DSN にクエリパラメーターを追加して、Go ドライバーを設定します。
https://ak:sk@endpoint/instance?retryTimes=3&requestTimeout=10s時間ベースのオプションでは、15s や 500ms のような Go の期間フォーマットを使用します。
オプション | デフォルト | 説明 |
| 10 | 最大リトライ回数。 整数。 |
| 15s | 接続タイムアウト。 |
| 30s | リクエストタイムアウト。 |
| 5s | 最大再試行間隔。 |
| 2000 | 最大アイドル接続数。 整数。 |
データ型のマッピング
Tablestore のデータ型は Go の型にマッピングされます。 型が一致しない場合、エラーが発生します。
Tablestore のデータ型 | Go のデータ型 |
整数 | int64 |
バイナリ | []byte |
文字列 | string |
倍精度浮動小数点数 | float64 |
ブール値 | bool |