Spanner database/sql 드라이버 사용

Go database/sql은 Go 프로그래밍 언어용 SQL(또는 SQL과 유사한) 데이터베이스의 일반 인터페이스입니다. 애플리케이션에서 database/sql을 사용하려면 Spanner database/sql 드라이버를 사용합니다.

Spanner 데이터베이스/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 드라이버를 사용할 때 최상의 성능을 얻으려면 다음 권장사항을 따르세요.

다음 단계