⌘+k ctrl+k
1.4 (LTS)
搜索快捷键 cmd + k | ctrl + k
Go 客户端

提示:要使用 DuckDB Go 客户端,请访问 Go 安装页面

DuckDB Go 客户端的最新稳定版本是 1.4.4。

DuckDB Go 客户端 duckdb-go 允许通过 database/sql 接口使用 DuckDB。有关如何使用此接口的示例,请参阅官方文档教程

安装

要安装 duckdb-go 客户端,请运行

go get github.com/duckdb/duckdb-go/v2

导入

要导入 DuckDB Go 软件包,请将以下条目添加到您的导入中

import (
	"database/sql"
	_ "github.com/duckdb/duckdb-go/v2"
)

Appender

DuckDB Go 客户端支持用于批量插入的 DuckDB Appender API。您可以通过向 NewAppenderFromConn() 提供 DuckDB 连接来获取新的 Appender。例如

connector, err := duckdb.NewConnector("test.db", nil)
if err != nil {
  ...
}
conn, err := connector.Connect(context.Background())
if err != nil {
  ...
}
defer conn.Close()

// Retrieve appender from connection (note that you have to create the table 'test' beforehand).
appender, err := NewAppenderFromConn(conn, "", "test")
if err != nil {
  ...
}
defer appender.Close()

err = appender.AppendRow(...)
if err != nil {
  ...
}

// Optional, if you want to access the appended rows immediately.
err = appender.Flush()
if err != nil {
  ...
}

示例

简单示例

使用 Go API 的示例如下

package main

import (
	"database/sql"
	"errors"
	"fmt"
	"log"

	_ "github.com/duckdb/duckdb-go/v2"
)

func main() {
	db, err := sql.Open("duckdb", "")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	_, err = db.Exec(`CREATE TABLE people (id INTEGER, name VARCHAR)`)
	if err != nil {
		log.Fatal(err)
	}
	_, err = db.Exec(`INSERT INTO people VALUES (42, 'John')`)
	if err != nil {
		log.Fatal(err)
	}

	var (
		id   int
		name string
	)
	row := db.QueryRow(`SELECT id, name FROM people`)
	err = row.Scan(&id, &name)
	if errors.Is(err, sql.ErrNoRows) {
		log.Println("no rows")
	} else if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("id: %d, name: %s\n", id, name)
}

更多示例

如需更多示例,请查看 duckdb-go 仓库中的示例

致谢

我们要感谢 Marc Boeker 对 DuckDB Go 客户端的初始实现所作的贡献。

© 2025 DuckDB 基金会,阿姆斯特丹,荷兰
行为准则 商标使用指南