Use a base de dados do Spanner/controlador SQL

Go database/sql é uma interface genérica em torno de bases de dados SQL (ou semelhantes a SQL) para a linguagem de programação Go. Para usar a biblioteca database/sql com a sua aplicação, use o controlador database/sql do Spanner.

O controlador Spannerdatabase/sql suporta bases de dados com o dialeto GoogleSQL e bases de dados com o dialeto PostgreSQL.

Instale a base de dados do Spanner/controlador SQL

Para usar a base de dados/o controlador SQL do Spanner na sua aplicação, adicione o seguinte módulo ao ficheiro go.mod:

  github.com/googleapis/go-sql-spanner

Use a base de dados do Spanner/controlador SQL

Para criar uma ligação de base de dados/SQL a uma base de dados do Spanner, use spanner como o nome do controlador e um nome de base de dados totalmente qualificado como a cadeia de caracteres de ligação:

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
}

Para mais informações, consulte o repositório do GitHub do controlador database/sql do Spanner.

Funcionalidades suportadas

O diretório de código de exemplos de base de dados/SQL do Spanner Go contém exemplos prontos a executar para funcionalidades do Spanner usadas com frequência.

Sugestões de desempenho

Para conseguir o melhor desempenho possível ao usar o controlador Spanner database/sql, siga estas práticas recomendadas:

O que se segue?