TDengine 語言連接器(Go)

簡介

driver-go 是 TDengine 的官方 Go 語言連接器,實現了 Go 語言 database/sql 包的接口。Go 開發人員可以通過它開發存取 TDengine 集群數據的應用軟件。

Go 版本兼容性

支持 Go 1.14 及以上版本。

支持的平臺

  • 原生連接支持的平臺和 TDengine 客戶端驅動支持的平臺一致。
  • WebSocket/REST 連接支持所有能運行 Go 的平臺。

版本歷史

driver-go 版本主要變化TDengine 版本
v3.7.0支持 decimal 類型3.3.6.0 及更高版本
v3.6.0stmt2 原生接口,DSN 支持密碼包含特殊字符(url.QueryEscape)3.3.5.0 及更高版本
v3.5.8修復空指針異常-
v3.5.7taosWS 和 taosRestful 支持傳入 request id-
v3.5.6提升 websocket 查詢和寫入性能3.3.2.0 及更高版本
v3.5.5restful 支持跳過 ssl 證書檢查-
v3.5.4兼容 TDengine 3.3.0.0 tmq raw data-
v3.5.3重構 taosWS-
v3.5.2websocket 壓縮和優化消息訂閱性能3.2.3.0 及更高版本
v3.5.1原生 stmt 查詢和 geometry 類型支持3.2.1.0 及更高版本
v3.5.0獲取消費進度及按照指定進度開始消費3.0.5.0 及更高版本
v3.3.1基于 websocket 的 schemaless 協議寫入3.0.4.1 及更高版本
v3.1.0提供貼近 kafka 的訂閱 api-
v3.0.4新增 request id 相關接口3.0.2.2 及更高版本
v3.0.3基于 websocket 的 statement 寫入-
v3.0.2基于 websocket 的數據查詢和寫入3.0.1.5 及更高版本
v3.0.1基于 websocket 的消息訂閱-
v3.0.0適配 TDengine 3.0 查詢和寫入3.0.0.0 及更高版本

異常和錯誤碼

如果是 TDengine 錯誤可以通過以下方式獲取錯誤碼和錯誤信息。

// import "github.com/taosdata/driver-go/v3/errors"if err != nil {tError, is := err.(*errors.TaosError)if is {fmt.Println("errorCode:", int(tError.Code))fmt.Println("errorMessage:", tError.ErrStr)} else {fmt.Println(err.Error())}}

TDengine 其他功能模塊的報錯,請參考 錯誤碼

數據類型映射

TDengine DataTypeGo Type
TIMESTAMPtime.Time
TINYINTint8
SMALLINTint16
INTint32
BIGINTint64
TINYINT UNSIGNEDuint8
SMALLINT UNSIGNEDuint16
INT UNSIGNEDuint32
BIGINT UNSIGNEDuint64
FLOATfloat32
DOUBLEfloat64
BOOLbool
BINARYstring
NCHARstring
JSON[]byte
GEOMETRY[]byte
VARBINARY[]byte
DECIMALstring

注意:JSON 類型僅在 tag 中支持。
GEOMETRY 類型是 little endian 字節序的二進制數據,符合 WKB 規范。詳細信息請參考 數據類型
WKB 規范請參考Well-Known Binary (WKB)

示例程序匯總

示例程序源碼請參考:示例程序

常見問題

  1. database/sql 中 stmt(參數綁定)相關接口崩潰

    REST 不支持參數綁定相關接口,建議使用db.Execdb.Query

  2. 使用 use db 語句后執行其他語句報錯 [0x217] Database not specified or available

    在 REST 接口中 SQL 語句的執行無上下文關聯,使用 use db 語句不會生效,解決辦法見上方使用限制章節。

  3. 使用 taosSql 不報錯使用 taosRestful 報錯 [0x217] Database not specified or available

    因為 REST 接口無狀態,使用 use db 語句不會生效,解決辦法見上方使用限制章節。

  4. readBufferSize 參數調大后無明顯效果

    readBufferSize 調大后會減少獲取結果時 syscall 的調用。如果查詢結果的數據量不大,修改該參數不會帶來明顯提升,如果該參數修改過大,瓶頸會在解析 JSON 數據。如果需要優化查詢速度,需要根據實際情況調整該值來達到查詢效果最優。

  5. disableCompression 參數設置為 false 時查詢效率降低

    disableCompression 參數設置為 false 時查詢結果會使用 gzip 壓縮后傳輸,拿到數據后要先進行 gzip 解壓。

  6. go get 命令無法獲取包,或者獲取包超時

設置 Go 代理 go env -w GOPROXY=https://goproxy.cn,direct

API 參考

database/sql 驅動

driver-go 實現了 Go 的 database/sql/driver 接口,可以直接使用 Go 的 database/sql 包。提供了三個驅動:github.com/taosdata/driver-go/v3/taosSqlgithub.com/taosdata/driver-go/v3/taosRestfulgithub.com/taosdata/driver-go/v3/taosWS 分別對應 原生連接REST 連接WebSocket 連接

DSN 規范

數據源名稱具有通用格式,例如 PEAR DB,但沒有類型前綴(方括號表示可選):

[username[:password]@][protocol[(address)]]/[dbname][?param1=value1&...&paramN=valueN]

完整形式的 DSN:

username:password@protocol(address)/dbname?param=value

當密碼中包含特殊字符時,需要使用 url.QueryEscape 進行轉義。

原生連接

導入驅動:

import ("database/sql"_ "github.com/taosdata/driver-go/v3/taosSql"
)

使用 taosSql 作為 driverName 并且使用一個正確的 DSN 作為 dataSourceName 如下:

var taosUri = "root:taosdata@tcp(localhost:6030)/"
taos, err := sql.Open("taosSql", taosUri)

支持的 DSN 參數:

  • cfg 指定 taos.cfg 目錄
  • cgoThread 指定 cgo 同時執行的數量,默認為系統核數
  • cgoAsyncHandlerPoolSize 指定異步函數的 handle 大小,默認為 10000
Rest 連接

導入驅動:

import ("database/sql"_ "github.com/taosdata/driver-go/v3/taosRestful"
)

使用 taosRestful 作為 driverName 并且使用一個正確的 DSN 作為 dataSourceName 如下:

var taosUri = "root:taosdata@http(localhost:6041)/"
taos, err := sql.Open("taosRestful", taosUri)

支持的 DSN 參數:

  • disableCompression 是否接受壓縮數據,默認為 true 不接受壓縮數據,如果傳輸數據使用 gzip 壓縮設置為 false。
  • readBufferSize 讀取數據的緩存區大小默認為 4K(4096),當查詢結果數據量多時可以適當調大該值。
  • token 連接云服務時使用的 token。
  • skipVerify 是否跳過證書驗證,默認為 false 不跳過證書驗證,如果連接的是不安全的服務設置為 true。
WebSocket 連接

導入驅動:

import ("database/sql"_ "github.com/taosdata/driver-go/v3/taosWS"
)

使用 taosWS 作為 driverName 并且使用一個正確的 DSN 作為 dataSourceName 如下:

var taosUri = "root:taosdata@ws(localhost:6041)/"
taos, err := sql.Open("taosWS", taosUri)

支持的 DSN 參數:

  • enableCompression 是否發送壓縮數據,默認為 false 不發送壓縮數據,如果傳輸數據使用壓縮設置為 true。
  • readTimeout 讀取數據的超時時間,默認為 5m。
  • writeTimeout 寫入數據的超時時間,默認為 10s。

:::note

  • 與原生連接方式不同,REST 接口是無狀態的。在使用 REST 連接時,需要在 SQL 中指定表、超級表的數據庫名稱。
  • 如果在 DSN 中指定了 dbname,那么,REST 連接會默認使用/rest/sql/dbname 作為 restful 請求的 url,在 SQL 中不需要指定 dbname。

:::

連接功能

Go 驅動支持創建連接,返回支持 sql/driver 標準的 Connector 接口的對象,還提供了 af 包,擴充了一些無模式寫入接口。

標準接口

database/sql 包中創建連接的接口

  • func Open(driverName, dataSourceName string) (*DB, error)
    • 接口說明:(database/sql) 連接數據庫
    • 參數說明
      • driverName:驅動名稱。
      • dataSourceName:連接參數 DSN。
    • 返回值:連接對象,錯誤信息。
擴展接口

af 包中創建連接的接口

  • func Open(host, user, pass, db string, port int) (*Connector, error)
    • 接口說明:連接數據庫。
    • 參數說明
      • host:主機地址。
      • user:用戶名。
      • pass:密碼。
      • db:數據庫名稱。
      • port:端口號。
    • 返回值:連接對象,錯誤信息。
無模式寫入

af 包中使用原生連接進行無模式寫入的接口。

  • func (conn *Connector) InfluxDBInsertLines(lines []string, precision string) error

    • 接口說明:無模式寫入 influxDB 格式數據。
    • 參數說明
      • lines:寫入的數據。
      • precision:時間精度。
    • 返回值:錯誤信息。
  • func (conn *Connector) OpenTSDBInsertJsonPayload(payload string) error

    • 接口說明:無模式寫入 OpenTSDB JSON 格式數據。
    • 參數說明
      • payload:寫入的數據。
    • 返回值:錯誤信息。
  • func (conn *Connector) OpenTSDBInsertTelnetLines(lines []string) error

    • 接口說明:無模式寫入 OpenTSDB Telnet 格式數據。
    • 參數說明
      • lines:寫入的數據。
    • 返回值:錯誤信息。

ws/schemaless 包中使用 WebSocket 無模式寫入的接口

  • func (s *Schemaless) Insert(lines string, protocol int, precision string, ttl int, reqID int64) error
    • 接口說明:無模式寫入數據。
    • 參數說明
      • lines:寫入的數據。
      • protocol:寫入的數據協議支持的協議 InfluxDBLineProtocol = 1 OpenTSDBTelnetLineProtocol = 2 OpenTSDBJsonFormatProtocol = 3
      • precision:時間精度。
      • ttl:數據過期時間,0 表示不過期。
      • reqID:請求 ID。
    • 返回值:錯誤信息。

執行 SQL

Go 驅動提供了符合 database/sql 標準的接口,支持以下功能:

  1. 執行 SQL 語句:執行靜態 SQL 語句,并返回其生成的結果對象。
  2. 查詢執行:可以執行返回數據集的查詢(SELECT 語句)。
  3. 更新執行:可以執行影響行數的 SQL 語句,如 INSERTUPDATEDELETE 等。
  4. 獲取結果:可以獲取查詢執行后返回的結果集,并遍歷查詢返回的數據。
  5. 獲取更新計數:對于非查詢 SQL 語句,可以獲取執行后影響的行數。
  6. 關閉資源:釋放數據庫資源。
標準接口
  • func (db *DB) Close() error

    • 接口說明:關閉連接。
    • 返回值:錯誤信息。
  • func (db *DB) Exec(query string, args ...any) (Result, error)

    • 接口說明:執行查詢但不返回任何行。
    • 參數說明
      • query:要執行的命令。
      • args:命令參數。
    • 返回值:Result 對象(只有影響行數),錯誤信息。
  • func (db *DB) Query(query string, args ...any) (*Rows, error)

    • 接口說明:執行查詢并返回行的結果。
    • 參數說明
      • query:要執行的命令。
      • args:命令參數。
    • 返回值:Rows 對象,錯誤信息。
  • func (db *DB) QueryRow(query string, args ...any) *Row

    • 接口說明:執行查詢并返回一行結果。
    • 參數說明
      • query:要執行的命令。
      • args:命令參數。
    • 返回值:Row 對象。
擴展接口
  • func (db *DB) ExecContext(ctx context.Context, query string, args ...any) (Result, error)

    • 接口說明:執行查詢但不返回任何行。
    • 參數說明
      • ctx:上下文,使用 Value 傳遞請求 id 進行鏈路追蹤,key 為 taos_req_id value 為 int64 類型值。
      • query:要執行的命令。
      • args:命令參數。
    • 返回值:結果 Result 對象(只有影響行數),錯誤信息。
  • func (db *DB) QueryContext(ctx context.Context, query string, args ...any) (*Rows, error)

    • 接口說明:執行查詢并返回行結果。
    • 參數說明
      • ctx:上下文,使用 Value 傳遞請求 id 進行鏈路追蹤,key 為 taos_req_id value 為 int64 類型值。
      • query:要執行的命令。
      • args:命令參數。
    • 返回值:結果集 Rows 對象,錯誤信息。
  • func (db *DB) QueryRowContext(ctx context.Context, query string, args ...any) *Row

    • 接口說明:執行查詢并返回一行結果,錯誤信息會在掃描 Row 時延遲返回。
    • 參數說明
      • ctx:上下文,使用 Value 傳遞請求 id 進行鏈路追蹤,key 為 taos_req_id value 為 int64 類型值。
      • query:要執行的命令。
      • args:命令參數。
    • 返回值:單行結果 Row 對象。

結果獲取

Go 驅動支持獲取查詢結果集,以及對應的結果集元數據,提供了用于讀取結果集中元數據和數據的方法。

結果集

通過 Rows 對象獲取查詢結果集,提供了以下方法:

  • func (rs *Rows) Next() bool

    • 接口說明:準備下一行數據。
    • 返回值:是否有下一行數據。
  • func (rs *Rows) Columns() ([]string, error)

    • 接口說明:返回列名。
    • 返回值:列名,錯誤信息。
  • func (rs *Rows) Scan(dest ...any) error

    • 接口說明:將當前行的列值復制到 dest 指向的值中。
    • 參數說明
      • dest:目標值。
    • 返回值:錯誤信息。
  • func (rs *Rows) Close() error

    • 接口說明:關閉行。
    • 返回值:錯誤信息。
  • func (r *Row) Scan(dest ...any) error

    • 接口說明:將當前行的列值復制到 dest 指向的值中。
    • 參數說明
      • dest:目標值。
    • 返回值:錯誤信息。

通過 Result 對象獲取更新結果集,提供了以下方法:

  • func (dr driverResult) RowsAffected() (int64, error)
    • 接口說明:返回受影響的行數。
    • 返回值:受影響的行數,錯誤信息。
結果集元數據

通過 Rows 對象獲取查詢結果集元數據,提供了以下方法:

  • func (rs *Rows) ColumnTypes() ([]*ColumnType, error)

    • 接口說明:返回列類型。
    • 返回值:列類型,錯誤信息。
  • func (ci *ColumnType) Name() string

    • 接口說明:返回列名。
    • 返回值:列名。
  • func (ci *ColumnType) Length() (length int64, ok bool)

    • 接口說明:返回列長度。
    • 返回值:列長度,是否有長度。
  • func (ci *ColumnType) ScanType() reflect.Type

    • 接口說明:返回列類型對應的 Go 類型。
    • 返回值:列類型。
  • func (ci *ColumnType) DatabaseTypeName() string

    • 接口說明:返回列類型數據庫名稱。
    • 返回值:列類型名稱。

參數綁定

Prepare 允許使用預編譯的 SQL 語句,可以提高性能并提供參數化查詢的能力,從而增加安全性。

標準接口

使用 sql/driverConn 接口中的 Prepare 方法準備一個與此連接綁定的準備好的語句,返回 Stmt 對象,使用。

  • Prepare(query string) (Stmt, error)

    • 接口說明:準備返回一個與此連接綁定的準備好的語句 (statement)。
    • 參數說明
      • query:要進行參數綁定的語句。
    • 返回值:Stmt 對象,錯誤信息。
  • func (s *Stmt) Exec(args ...any) (Result, error)

    • 接口說明:使用給定的參數執行準備好的語句并返回總結該語句效果的結果(只可以綁定列值,不支持綁定表名和 tag)。
    • 參數說明
      • args:命令參數,Go 原始類型會自動轉換數據庫類型,類型不匹配可能會丟精度,建議使用與數據庫相同的類型,時間類型使用 int64 或 RFC3339Nano 格式化后的字符串。
    • 返回值:結果 Result 對象(只有影響行數),錯誤信息。
  • func (s *Stmt) Query(args ...any) (*Rows, error)

    • 接口說明:使用給定的參數執行準備好的語句并返回行的結果。
    • 參數說明
      • args:命令參數,Go 原始類型會自動轉換數據庫類型,類型不匹配可能會丟精度,建議使用與數據庫相同的類型,時間類型使用 int64 或 RFC3339Nano 格式化后的字符串。
    • 返回值:結果集 Rows 對象,錯誤信息。
  • func (s *Stmt) Close() error

    • 接口說明:關閉語句。
    • 返回值:錯誤信息。
擴展接口

af 包中提供了使用原生連接進行參數綁定的更多接口

  • func (conn *Connector) Stmt() *Stmt

    • 接口說明:返回一個與此連接綁定的 Stmt 對象。
    • 返回值:Stmt 對象。
  • func (s *Stmt) Prepare(sql string) error

    • 接口說明:準備一個 sql。
    • 參數說明
      • sql:要進行參數綁定的語句。
    • 返回值:錯誤信息。
  • func (s *Stmt) NumParams() (int, error)

    • 接口說明:返回參數數量。
    • 返回值:參數數量,錯誤信息。
  • func (s *Stmt) SetTableNameWithTags(tableName string, tags *param.Param)

    • 接口說明:設置表名和 tag。
    • 參數說明
      • tableName:表名。
      • tags:tag。
    • 返回值:錯誤信息。
  • func (s *Stmt) SetTableName(tableName string) error

    • 接口說明:設置表名。
    • 參數說明
      • tableName:表名。
    • 返回值:錯誤信息。
  • func (s *Stmt) BindRow(row *param.Param) error

    • 接口說明:綁定行。
    • 參數說明
      • row:行數據。
    • 返回值:錯誤信息。
  • func (s *Stmt) GetAffectedRows() int

    • 接口說明:獲取受影響的行數。
    • 返回值:受影響的行數。
  • func (s *Stmt) AddBatch() error

    • 接口說明:添加批處理。
    • 返回值:錯誤信息。
  • func (s *Stmt) Execute() error

    • 接口說明:執行批處理。
    • 返回值:錯誤信息。
  • func (s *Stmt) UseResult() (driver.Rows, error)

    • 接口說明:使用結果。
    • 返回值:結果集 Rows 對象,錯誤信息。
  • func (s *Stmt) Close() error

    • 接口說明:關閉語句。
    • 返回值:錯誤信息。

從 3.6.0 版本開始,提供 stmt2 綁定參數的接口

  • func (conn *Connector) Stmt2(reqID int64, singleTableBindOnce bool) *Stmt2
    • 接口說明:從連接創建 stmt2。
    • 參數說明
      • reqID:請求 ID。
      • singleTableBindOnce:單個子表在單次執行中只有一次數據綁定。
    • 返回值:stmt2 對象。
  • func (s *Stmt2) Prepare(sql string) error
    • 接口說明:綁定 sql 語句。
    • 參數說明
      • sql:要綁定的 sql 語句。
    • 返回值:錯誤信息。
  • func (s *Stmt2) Bind(params []*stmt.TaosStmt2BindData) error
    • 接口說明:綁定數據。
    • 參數說明
      • params 要綁定的數據。
    • 返回值:錯誤信息。
  • func (s *Stmt2) Execute() error
    • 接口說明:執行語句。
    • 返回值:錯誤信息。
  • func (s *Stmt2) GetAffectedRows() int
    • 接口說明:獲取受影響行數(只在插入語句有效)。
    • 返回值:受影響行數。
  • func (s *Stmt2) UseResult() (driver.Rows, error)
    • 接口說明:獲取結果集(只在查詢語句有效)。
    • 返回值:結果集 Rows 對象,錯誤信息。
  • func (s *Stmt2) Close() error
    • 接口說明:關閉 stmt2。
    • 返回值:錯誤信息。

ws/stmt 包提供了通過 WebSocket 進行參數綁定的接口

  • func (c *Connector) Init() (*Stmt, error)

    • 接口說明:初始化。
    • 返回值:Stmt 對象,錯誤信息。
  • func (s *Stmt) Prepare(sql string) error

    • 接口說明:準備一個 sql。
    • 參數說明
      • sql:要進行參數綁定的語句。
    • 返回值:錯誤信息。
  • func (s *Stmt) SetTableName(name string) error

    • 接口說明:設置表名。
    • 參數說明
      • name:表名。
    • 返回值:錯誤信息。
  • func (s *Stmt) SetTags(tags *param.Param, bindType *param.ColumnType)

    • 接口說明:設置 tag。
    • 參數說明
      • tags:tag。
      • bindType:類型信息。
    • 返回值:錯誤信息。
  • func (s *Stmt) BindParam(params []*param.Param, bindType *param.ColumnType) error

    • 接口說明:綁定參數。
    • 參數說明
      • params:參數。
      • bindType:類型信息。
    • 返回值:錯誤信息。
  • func (s *Stmt) AddBatch() error

    • 接口說明:添加批處理。
    • 返回值:錯誤信息。
  • func (s *Stmt) Exec() error

    • 接口說明:執行批處理。
    • 返回值:錯誤信息。
  • func (s *Stmt) GetAffectedRows() int

    • 接口說明:獲取受影響的行數。
    • 返回值:受影響的行數。
  • func (s *Stmt) UseResult() (*Rows, error)

    • 接口說明:使用結果。
    • 返回值:Rows 對象,錯誤信息。
  • func (s *Stmt) Close() error

    • 接口說明:關閉語句。
    • 返回值:錯誤信息。

Rows 行結果參考 sql/driver 包中的 Rows 接口,提供以下接口

  • func (rs *Rows) Columns() []string

    • 接口說明:返回列名。
    • 返回值:列名。
  • func (rs *Rows) ColumnTypeDatabaseTypeName(i int) string

    • 接口說明:返回列類型數據庫名稱。
    • 參數說明
      • i:列索引。
    • 返回值:列類型名稱。
  • func (rs *Rows) ColumnTypeLength(i int) (length int64, ok bool)

    • 接口說明:返回列長度。
    • 參數說明
      • i:列索引。
    • 返回值:列長度,是否有長度。
  • func (rs *Rows) ColumnTypeScanType(i int) reflect.Type

    • 接口說明:返回列類型對應的 Go 類型。
    • 參數說明
      • i:列索引。
    • 返回值:列類型。
  • func (rs *Rows) Next(dest []driver.Value) error

    • 接口說明:準備下一行數據,并賦值給目標。
    • 參數說明
      • dest:目標值。
    • 返回值:錯誤信息。
  • func (rs *Rows) Close() error

    • 接口說明:關閉行。
    • 返回值:錯誤信息。

common/param 包中提供了參數綁定數據結構

以下是按照偏移設置參數的接口:

  • func NewParam(size int) *Param

    • 接口說明:創建一個參數綁定數據結構。
    • 參數說明
      • size:參數數量。
    • 返回值:Param 對象。
  • func (p *Param) SetBool(offset int, value bool)

    • 接口說明:設置布爾值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:布爾值。
  • func (p *Param) SetNull(offset int)

    • 接口說明:設置空值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
  • func (p *Param) SetTinyint(offset int, value int)

    • 接口說明:設置 Tinyint 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Tinyint 值。
  • func (p *Param) SetSmallint(offset int, value int)

    • 接口說明:設置 Smallint 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Smallint 值。
  • func (p *Param) SetInt(offset int, value int)

    • 接口說明:設置 Int 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Int 值。
  • func (p *Param) SetBigint(offset int, value int)

    • 接口說明:設置 Bigint 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Bigint 值。
  • func (p *Param) SetUTinyint(offset int, value uint)

    • 接口說明:設置 UTinyint 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:UTinyint 值。
  • func (p *Param) SetUSmallint(offset int, value uint)

    • 接口說明:設置 USmallint 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:USmallint 值。
  • func (p *Param) SetUInt(offset int, value uint)

    • 接口說明:設置 UInt 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:UInt 值。
  • func (p *Param) SetUBigint(offset int, value uint)

    • 接口說明:設置 UBigint 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:UBigint 值。
  • func (p *Param) SetFloat(offset int, value float32)

    • 接口說明:設置 Float 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Float 值。
  • func (p *Param) SetDouble(offset int, value float64)

    • 接口說明:設置 Double 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Double 值。
  • func (p *Param) SetBinary(offset int, value []byte)

    • 接口說明:設置 Binary 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Binary 值。
  • func (p *Param) SetVarBinary(offset int, value []byte)

    • 接口說明:設置 VarBinary 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:VarBinary 值。
  • func (p *Param) SetNchar(offset int, value string)

    • 接口說明:設置 Nchar 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Nchar 值。
  • func (p *Param) SetTimestamp(offset int, value time.Time, precision int)

    • 接口說明:設置 Timestamp 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Timestamp 值。
      • precision:時間精度。
  • func (p *Param) SetJson(offset int, value []byte)

    • 接口說明:設置 Json 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Json 值。
  • func (p *Param) SetGeometry(offset int, value []byte)

    • 接口說明:設置 Geometry 值。
    • 參數說明
      • offset:偏移量 (列或標簽)。
      • value:Geometry 值。

以下是鏈式調用設置參數的接口:

  • func (p *Param) AddBool(value bool) *Param
    • 接口說明:添加布爾值。
    • 參數說明
      • value:布爾值。
    • 返回值:Param 對象。

其他類型與布爾值類似,具體接口如下:

  • AddNull
  • AddTinyint
  • AddSmallint
  • AddInt
  • AddBigint
  • AddUTinyint
  • AddUSmallint
  • AddUInt
  • AddUBigint
  • AddFloat
  • AddDouble
  • AddBinary
  • AddVarBinary
  • AddNchar
  • AddTimestamp
  • AddJson
  • AddGeometry

以下是設置列類型信息的接口:

  • func NewColumnType(size int) *ColumnType

    • 接口說明:創建一個列類型信息數據結構。
    • 參數說明
      • size:列數量。
    • 返回值:ColumnType 對象。
  • func (c *ColumnType) AddBool() *ColumnType

    • 接口說明:添加布爾類型。
    • 返回值:ColumnType 對象。

其他類型與布爾類型類似,具體接口如下:

  • AddTinyint
  • AddSmallint
  • AddInt
  • AddBigint
  • AddUTinyint
  • AddUSmallint
  • AddUInt
  • AddUBigint
  • AddFloat
  • AddDouble
  • AddBinary
  • AddVarBinary
  • AddNchar
  • AddTimestamp
  • AddJson
  • AddGeometry

數據訂閱

Go 驅動支持數據訂閱功能,提供了基于原生連接和 WebSocket 連接的數據訂閱接口。原生實現在 af/tmq 包中,WebSocket 實現在 ws/tmq 包中。

消費者
  • func NewConsumer(conf *tmq.ConfigMap) (*Consumer, error)
    • 接口說明:創建一個消費者。
    • 參數說明
      • conf:配置信息。
    • 返回值:Consumer 對象,錯誤信息。

配置信息定義為:

type ConfigValue interface{}
type ConfigMap map[string]ConfigValue

創建消費者支持屬性列表:

  • ws.url:WebSocket 連接地址。
  • ws.message.channelLen:WebSocket 消息通道緩存長度,默認 0。
  • ws.message.timeout:WebSocket 消息超時時間,默認 5m。
  • ws.message.writeWait:WebSocket 寫入消息超時時間,默認 10s。
  • ws.message.enableCompression:WebSocket 是否啟用壓縮,默認 false。
  • ws.autoReconnect:WebSocket 是否自動重連,默認 false。
  • ws.reconnectIntervalMs:WebSocket 重連間隔時間毫秒,默認 2000。
  • ws.reconnectRetryCount:WebSocket 重連重試次數,默認 3。

其他參數請參考:Consumer 參數列表,注意 TDengine 服務端自 3.2.0.0 版本開始消息訂閱中的 auto.offset.reset 默認值發生變化。

  • func (c *Consumer) Subscribe(topic string, rebalanceCb RebalanceCb) error

    • 接口說明:訂閱主題。
    • 參數說明
      • topic:主題。
      • rebalanceCb:平衡回調(未使用)。
    • 返回值:錯誤信息。
  • func (c *Consumer) SubscribeTopics(topics []string, rebalanceCb RebalanceCb) error

    • 接口說明:訂閱主題列表。
    • 參數說明
      • topics:主題列表。
      • rebalanceCb:平衡回調(未使用)。
    • 返回值:錯誤信息。
  • func (c *Consumer) Unsubscribe() error

    • 接口說明:取消訂閱。
    • 返回值:錯誤信息。
  • func (c *Consumer) Poll(timeoutMs int) tmq.Event

    • 接口說明:輪詢事件。
    • 參數說明
      • timeoutMs:超時時間。
    • 返回值:事件。
  • func (c *Consumer) Commit() ([]tmq.TopicPartition, error)

    • 接口說明:提交偏移量。
    • 返回值:TopicPartition 列表,錯誤信息。
  • func (c *Consumer) Assignment() (partitions []tmq.TopicPartition, err error)

    • 接口說明:獲取分配信息。
    • 返回值:TopicPartition 列表,錯誤信息。
  • func (c *Consumer) Seek(partition tmq.TopicPartition, ignoredTimeoutMs int) error

    • 接口說明:跳轉到偏移量。
    • 參數說明
      • partition:分區和偏移信息。
      • ignoredTimeoutMs:超時時間(未使用)。
    • 返回值:錯誤信息。
  • func (c *Consumer) Committed(partitions []tmq.TopicPartition, timeoutMs int) (offsets []tmq.TopicPartition, err error)

    • 接口說明:獲取提交的偏移量。
    • 參數說明
      • partitions:分區列表。
      • timeoutMs:超時時間。
    • 返回值:TopicPartition 列表,錯誤信息。
  • func (c *Consumer) CommitOffsets(offsets []tmq.TopicPartition) ([]tmq.TopicPartition, error)

    • 接口說明:提交偏移量。
    • 參數說明
      • offsets:偏移量列表。
    • 返回值:TopicPartition 列表,錯誤信息。
  • func (c *Consumer) Position(partitions []tmq.TopicPartition) (offsets []tmq.TopicPartition, err error)

    • 接口說明:獲取當前偏移量。
    • 參數說明
      • partitions:分區列表。
    • 返回值:TopicPartition 列表,錯誤信息。
  • func (c *Consumer) Close() error

    • 接口說明:關閉消費者。
    • 返回值:錯誤信息。
消費記錄

Poll 返回 tmq.Event 事件時,可以通過判斷 tmq.Event 的類型獲取消費記錄或錯誤信息。當類型為 *tmq.DataMessage 時,可以獲取消費記錄。

  • func (m *DataMessage) Topic() string

    • 接口說明:獲取主題。
    • 返回值:主題。
  • func (m *DataMessage) DBName() string

    • 接口說明:獲取數據庫名稱。
    • 返回值:數據庫名稱。
  • func (m *DataMessage) Offset() Offset

    • 接口說明:獲取偏移量。
    • 返回值:偏移量。
  • func (m *DataMessage) Value() interface{}

    • 接口說明:獲取值,具體值為 []*tmq.data
    • 返回值:消費到的值。

tmq.data 結構如下:

type Data struct {TableName stringData      [][]driver.Value
}
  • TableName 為表名
  • Data 為數據,每個元素為一行數據,每行數據為一個數組,數組元素為列值。

當 Poll 返回類型為 tmq.Error 時,可以使用 func (e Error) Error() string 獲取錯誤信息。

分區信息

當消費到數據類型為 *tmq.DataMessage 時,可以從 TopicPartition 屬性中獲取分區信息。

type TopicPartition struct {Topic     *stringPartition int32Offset    OffsetMetadata  *stringError     error
}
  • Topic:主題。
  • Partition:分區。
  • Offset:偏移量。
  • Metadata:元數據(未使用)。
  • Error:錯誤信息。

可以使用 func (p TopicPartition) String() string 獲取分區信息。

偏移量元數據

TopicPartition 中獲取的偏移量信息,可以通過 Offset 屬性獲取偏移量元數據。當偏移量為 -2147467247 時表示未設置偏移量。

反序列化

當消費到數據類型為 *tmq.DataMessage 時,可以使用 func (m *DataMessage) Value() interface{} 獲取數據,數據類型為 []*tmq.data

附錄

  • driver-go 文檔。
  • 視頻教程。

訪問官網

更多內容歡迎訪問 TDengine 官網

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76778.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鏈接世界:計算機網絡的核心與前沿

計算機網絡引言 在數字化時代,計算機網絡已經成為我們日常生活和工作中不可或缺的基礎設施。從簡單的局域網(LAN)到全球互聯網,計算機網絡將數以億計的設備連接在一起,推動了信息交換、資源共享以及全球化的進程。 什…

AI agents系列之全面介紹

隨著大型語言模型(LLMs)的出現,人工智能(AI)取得了巨大的飛躍。這些強大的系統徹底改變了自然語言處理,但當它們與代理能力結合時,才真正釋放出潛力——能夠自主地推理、規劃和行動。這就是LLM代理大顯身手的地方,它們代表了我們與AI交互以及利用AI的方式的范式轉變。 …

如何使用AI輔助開發CSS3 - 通義靈碼功能全解析

一、引言 CSS3 作為最新的 CSS 標準,引入了眾多新特性,如彈性布局、網格布局等,極大地豐富了網頁樣式的設計能力。然而,CSS3 的樣式規則繁多,記憶所有規則對于開發者來說幾乎是不可能的任務。在實際開發中&#xff0c…

復刻系列-星穹鐵道 3.2 版本先行展示頁

復刻星穹鐵道 3.2 版本先行展示頁 0. 視頻 手搓~星穹鐵道~展示頁~~~ 1. 基本信息 作者: 啊是特嗷桃系列: 復刻系列官方的網站: 《崩壞:星穹鐵道》3.2版本「走過安眠地的花叢」專題展示頁現已上線復刻的網…

爬蟲:IP代理

什么是代理 代理服務器 代理服務器的作用 就是用來轉發請求和響應 在爬蟲中為何需要使用代理? 有些時候,需要對網站服務器發起高頻的請求,網站的服務器會檢測到這樣的異常現象,則會講請求對應機器的ip地址加入黑名單&#xff…

協程的原生掛起與恢復機制

目錄 🔍 一、從開發者視角看協程掛起與恢復 🧠 二、協程掛起和恢復的機制原理:核心關鍵詞 ? suspend 函數 ≠ 普通函數 ? Continuation(協程的控制器) 🔧 三、編譯器做了什么?&#xff0…

c++11--std::forwaord--完美轉發

std::forword的作用 完美轉發的核心目的是保持參數的原始類型(包括const/volatile限定符和左值/右值性質)不變地傳遞給其他函數。 為什么需要完美轉發 在沒有完美轉發之前,我們面臨以下問題: 模板參數傳遞中的值類別丟失 當參數…

Linux安裝開源版MQTT Broker——EMQX服務器環境從零到一的詳細搭建教程

零、EMQX各個版本的區別 EMQX各個版本的功能對比詳情https://docs.emqx.com/zh/emqx/latest/getting-started/feature-comparison.html

計算機組成原理-存儲器

1. 存儲器的定義與作用 存儲器是計算機系統中用于存儲程序、數據和中間結果的硬件設備,是計算機五大核心部件之一。 核心功能: 提供數據的 臨時或永久存儲 能力。支持CPU按需快速存取指令和數據,是程序運行的物理基礎。 2. 存儲器的分類 …

單片機領域中哈希表

以下是單片機領域中哈希表的實際應用及編程實例: 1.哈希表在單片機中的實際應用場景 ? 命令解析:在單片機通信中,經常需要解析接收到的命令。使用哈希表可以快速地將命令字符串映射到對應的處理函數,提高命令解析的效率。 ? 數…

算法思想之位運算(一)

歡迎拜訪:霧里看山-CSDN博客 本篇主題:算法思想之位運算(一) 發布時間:2025.4.12 隸屬專欄:算法 目錄 滑動窗口算法介紹六大基礎位運算符常用模板總結 例題位1的個數題目鏈接題目描述算法思路代碼實現 比特位計數題目鏈接題目描述…

封裝Tcp Socket

封裝Tcp Socket 0. 前言1. Socket.hpp2. 簡單的使用介紹 0. 前言 本文中用到的Log.hpp在筆者的歷史文章中都有涉及,這里就不再粘貼源碼了,學習地址如下:https://blog.csdn.net/weixin_73870552/article/details/145434855?spm1001.2014.3001…

全星APQP軟件:為用戶提供高效、合規、便捷的研發管理體驗

全星APQP軟件:為用戶提供高效、合規、便捷的研發管理體驗 為什么選擇全星APQP軟件系統? 在汽車及高端制造行業,研發項目管理涉及APQP(先期產品質量策劃)、FMEA(失效模式與影響分析)、CP&#x…

CTF--網站被黑

一、原題: (1)提示:網站被黑了 黑客會不會留下后門 (2)原網頁: 二、步驟: 1.在終端掃描網址: 2.掃描后發現:shell.php 3.輸入網址:http://117.…

入門到精通,C語言十大經典程序

以下是十個經典的C語言程序示例&#xff0c;這些程序涵蓋了從基礎到稍復雜的應用場景&#xff0c;適合初學者和有一定基礎的開發者學習和參考。 1. Hello, World! 這是每個初學者學習編程時的第一個程序&#xff0c;用于驗證開發環境是否正確配置。 #include <stdio.h>…

神經網絡入門—自定義神經網絡續集

修改網絡 神經網絡入門—自定義網絡-CSDN博客 修改數據集&#xff0c;yx^2 # 生成一些示例數據 x_train torch.tensor([[1.0], [2.0], [3.0], [4.0]], dtypetorch.float32) y_train torch.tensor([[1.0], [4.0], [9.0], [16.0]], dtypetorch.float32) 將預測代碼改為&…

【browser-use+deepseek】實現簡單的web-ui自動化

browser-use Web-UI 一、browser-use是什么 Browser Use 是一款開源Python庫&#xff0c;專為大語言模型設計的智能瀏覽器工具&#xff0c;目的是讓 AI 能夠像人類一樣自然地瀏覽和操作網頁。它支持多標簽頁管理、視覺識別、內容提取&#xff0c;并能記錄和重復執行特定動作。…

Vue--常用組件解析

綁定事件v-on和按鍵修飾符 v-on:click 表示在button元素上監聽click事件 簡寫&#xff1a;click enter space tab 按鍵修飾符 keyup是用戶松開按鍵才觸發 keydown是在用戶按下按鍵時立即觸發 代碼展示&#xff1a; <!DOCTYPE html><html lang"en" xml…

《JVM考古現場(十八):造化玉碟·用字節碼重寫因果律的九種方法》

"鴻蒙初判&#xff01;當前因果鏈突破十一維屏障——全體碼農修士注意&#xff0c;《JVM考古現場&#xff08;十八&#xff09;》即將渡劫飛升&#xff01;" 目錄 上卷陰陽交纏 第一章&#xff1a;混沌初開——JVM因果律的量子糾纏 第二章&#xff1a;誅仙劍陣改—…

前端vue 項目px轉為rem的自適應解決方案

postcss-pxtorem&#xff08;或是postcss-px2rem&#xff09; npm install postcss-pxtorem amfe-flexible --save-dev 在入口文件 main.js 中引入 amfe-flexible&#xff08;響應式適配&#xff09;&#xff1a; main.js import amfe-flexible // 自動設置 html 的 font-s…