Usar el controlador de base de datos o SQL de Spanner

database/sql de Go es una interfaz genérica para bases de datos SQL (o similares a SQL) para el lenguaje de programación Go. Para usar database/sql con tu aplicación, usa el controlador database/sql de Spanner.

El controlador Spannerdatabase/sql admite bases de datos con dialecto de GoogleSQL y con dialecto de PostgreSQL.

Instalar la base de datos o el controlador SQL de Spanner

Para usar el controlador de base de datos o SQL de Spanner en tu aplicación, añade el siguiente módulo al archivo go.mod:

  github.com/googleapis/go-sql-spanner

Usar el controlador de base de datos o SQL de Spanner

Para crear una conexión database/sql a una base de datos de Spanner, usa spanner como nombre del controlador y un nombre de base de datos completo como cadena de conexión:

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 obtener más información, consulta el repositorio de GitHub del controlador database/sql de Spanner.

Funciones compatibles

El directorio de código de ejemplos de base de datos/sql de Spanner Go contiene ejemplos listos para ejecutar de las funciones de Spanner que se usan con frecuencia.

Consejos sobre rendimiento

Para obtener el mejor rendimiento posible al usar el controlador database/sql de Spanner, siga estas prácticas recomendadas:

Siguientes pasos