すべてのプロダクト
Search
ドキュメントセンター

Tablestore:Go ドライバーを使用したデータクエリ

最終更新日:Jun 06, 2026

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 ドライバー名。 これを ots に設定します。

dataSourceName

DSN は schema://accessKeyId:accessKeySecret@endpoint/instanceName[?param1=value1&...&paramN=valueN] のフォーマットです。 主要なフィールドは次のとおりです:

  • schema (必須): プロトコル。 通常は https です。

  • accessKeyId:accessKeySecret (必須): Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey Secret。

  • endpoint (必須): ご利用の Tablestore インスタンスのエンドポイント。

  • instanceName (必須): ご利用の Tablestore インスタンスの名前。

その他の設定オプションについては、「設定オプション」をご参照ください。

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

時間ベースのオプションでは、15s500ms のような Go の期間フォーマットを使用します。

オプション

デフォルト

説明

retryTimes

10

最大リトライ回数。 整数。

connectionTimeout

15s

接続タイムアウト。 0 はタイムアウトなしを意味します。

requestTimeout

30s

リクエストタイムアウト。

maxRetryTime

5s

最大再試行間隔。

maxIdleConnections

2000

最大アイドル接続数。 整数。

データ型のマッピング

Tablestore のデータ型は Go の型にマッピングされます。 型が一致しない場合、エラーが発生します。

Tablestore のデータ型

Go のデータ型

整数

int64

バイナリ

[]byte

文字列

string

倍精度浮動小数点数

float64

ブール値

bool