使用 Spanner database/sql 驱动程序

Go database/sql 是 Go 编程语言的 SQL(或类似 SQL)数据库的通用接口。如需将 database/sql 与您的应用搭配使用,请使用 Spanner database/sql 驱动程序

Spannerdatabase/sql 驱动程序支持 GoogleSQL 方言数据库和 PostgreSQL 方言数据库。

安装 Spanner database/sql 驱动程序

如需在应用中使用 Spanner database/sql 驱动程序,请将以下模块添加到 go.mod 文件:

  github.com/googleapis/go-sql-spanner

使用 Spanner database/sql 驱动程序

如需创建与 Spanner 数据库的 database/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 database/sql 驱动程序 GitHub 代码库

支持的功能

Spanner Go database/sql 示例代码目录包含可随时运行的常用 Spanner 功能示例。

性能提示

如需在使用 Spanner database/sql 驱动程序时获得最佳性能,请遵循以下最佳实践:

后续步骤