全部產品
Search
文件中心

Tablestore:通過Go語言驅動使用SQL查詢

更新時間:Jun 06, 2026

Table Store提供 Go 語言驅動(aliyun-tablestore-go-sql-driver),實現了 database/sql/driver 介面,支援通過標準 database/sql 包訪問Table Store資料。

前提條件

  • 已擷取 AccessKey,RAM 使用者需具備"Action": "ots:SQL*"許可權。

  • 已建立資料表和映射表,詳見DDL 操作

使用流程

步驟一:安裝Go語言驅動

執行以下命令安裝 Go 語言驅動:

go get github.com/aliyun/aliyun-tablestore-go-sql-driver

步驟二:使用Go語言驅動直連

參數說明

使用 Go 語言驅動訪問Table Store時,需要設定驅動名稱和 DSN(資料來源名稱)。參數說明如下。

參數

說明

driverName

Table Store Go 語言驅動名稱,固定取值為 ots

dataSourceName

Table Store資料來源名稱。格式為schema://accessKeyId:accessKeySecret@endpoint/instanceName[?param1=value1&...&paramN=valueN]。主要欄位說明如下:

  • schema(必選):Table Store驅動使用的協議,一般設定為 https

  • accessKeyId:accessKeySecret(必選):阿里雲帳號或 RAM 使用者的 AccessKey ID 和 AccessKey Secret。

  • endpoint(必選):執行個體的服務地址。

  • instanceName(必選):執行個體名稱。

其他常用配置項的說明詳見配置項

樣本

import (
    "database/sql"
    _ "github.com/aliyun/aliyun-tablestore-go-sql-driver"
)

// 設定Go語言驅動名稱和Table Store資料來源名稱。
db, err := sql.Open("ots", "https://access_key_id:access_key_secret@endpoint/instance_name")
if err != nil {
    panic(err)    // 處理錯誤。
}

步驟三:查詢資料

Go 語言驅動支援使用 Query 方法直接執行查詢語句,也支援使用 Prepare 建立預先處理語句查詢。

說明

擷取查詢結果時,接收欄位資料的變數類型必須與Table Store的欄位資料類型匹配。映射關係參見資料類型映射

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)
}

完整樣本

以下樣本用於串連Table Store執行個體並查詢 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

常用配置項說明如下。時間類配置項均使用 Go duration 格式(如 15s500ms)。

配置項

預設值

說明

retryTimes

10

最大重試次數。整數。

connectionTimeout

15s

建立串連的逾時時間。0 表示無限等待。

requestTimeout

30s

發送請求的逾時時間。

maxRetryTime

5s

最大觸發重試時間。

maxIdleConnections

2000

最大空閑串連數。整數。

資料類型映射

Table Store與 Go 語言的欄位資料類型對應關係如下。類型不符時會返回錯誤。

Table Store中欄位資料類型

Go語言中欄位資料類型

Integer

int64

Binary

[]byte

String

string

Double

float64

Boolean

bool