使用 Spanner 資料庫/SQL 驅動程式

Go database/sql 是 Go 程式設計語言的 SQL (或類似 SQL) 資料庫通用介面。如要在應用程式中使用 database/sql,請使用 Spanner database/sql 驅動程式

Spannerdatabase/sql 驅動程式同時支援 GoogleSQL 方言資料庫和 PostgreSQL 方言資料庫。

安裝 Spanner 資料庫/SQL 驅動程式

如要在應用程式中使用 Spanner 資料庫/SQL 驅動程式,請將下列模組新增至 go.mod 檔案:

  github.com/googleapis/go-sql-spanner

使用 Spanner 資料庫/SQL 驅動程式

如要建立與 Spanner 資料庫的資料庫/SQL 連線,請使用 spanner 做為驅動程式名稱,並使用完整資料庫名稱做為連線字串:

GoogleSQL

import (
	"context"
	"database/sql"
	"fmt"

	_ "github.com/googleapis/go-sql-spanner"
)

func connect(projectId, instanceId, databaseId string) error {
	ctx := context.Background()
	dsn := fmt.Sprintf("projects/%s/instances/%s/databases/%s",
		projectId, instanceId, databaseId)
	db, err := sql.Open("spanner", dsn)
	if err != nil {
		return fmt.Errorf("failed to open database connection: %v", err)
	}
	defer func() { _ = db.Close() }()

	fmt.Printf("Connected to %s\n", dsn)
	row := db.QueryRowContext(ctx, "select @greeting", "Hello from Spanner")
	var greeting string
	if err := row.Scan(&greeting); err != nil {
		return fmt.Errorf("failed to get greeting: %v", err)
	}
	fmt.Printf("Greeting: %s\n", greeting)

	return nil
}

PostgreSQL

import (
	"context"
	"database/sql"
	"fmt"

	_ "github.com/googleapis/go-sql-spanner"
)

func connect(projectId, instanceId, databaseId string) error {
	ctx := context.Background()
	dsn := fmt.Sprintf("projects/%s/instances/%s/databases/%s",
		projectId, instanceId, databaseId)
	db, err := sql.Open("spanner", dsn)
	if err != nil {
		return fmt.Errorf("failed to open database connection: %v", err)
	}
	defer func() { _ = db.Close() }()

	fmt.Printf("Connected to %s\n", dsn)
	// The Spanner database/sql driver supports both PostgreSQL-style query
	// parameters ($1, $2, ...) and positional query parameters (?, ?, ...).
	// This example uses PostgreSQL-style parameters.
	row := db.QueryRowContext(ctx, "select $1", "Hello from Spanner PostgreSQL")
	var greeting string
	if err := row.Scan(&greeting); err != nil {
		return fmt.Errorf("failed to get greeting: %v", err)
	}
	fmt.Printf("Greeting: %s\n", greeting)

	return nil
}

詳情請參閱 Spanner 資料庫/SQL 驅動程式 GitHub 存放區

支援功能

Spanner Go 資料庫/SQL 範例程式碼目錄包含常用 Spanner 功能的執行範例。

效能提示

使用 Spanner 資料庫/SQL 驅動程式時,請遵循下列最佳做法,盡可能獲得最佳成效:

後續步驟