Zum Inhalt springen

Go-Client

Installation Um den DuckDB-Go-Client zu verwenden, besuchen Sie die Go-Installationsseite.

Die aktuellste stabile Version des DuckDB-Go-Clients ist 1.5.5.

Der DuckDB-Go-Client duckdb-go ermöglicht die Nutzung von DuckDB über die Schnittstelle database/sql. Beispiele zur Verwendung dieser Schnittstelle finden Sie in der offiziellen Dokumentation und im Tutorial.

Installation

Um den duckdb-go-Client zu installieren, führen Sie aus:

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

Import

Um das DuckDB-Go-Paket zu importieren, fügen Sie die folgenden Einträge zu Ihren Imports hinzu:

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

Appender

Der DuckDB-Go-Client unterstützt die DuckDB-Appender-API für Masseneinfügungen. Sie erhalten einen neuen Appender, indem Sie eine DuckDB-Verbindung an NewAppenderFromConn() übergeben. Zum Beispiel:

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 {
...
}

Beispiele

Einfaches Beispiel

Ein Beispiel für die Verwendung der 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)
}

Weitere Beispiele

Weitere Beispiele finden Sie in den Beispielen im duckdb-go-Repository.

Danksagung

Wir danken Marc Boeker für die ursprüngliche Implementierung des DuckDB-Go-Clients.