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 más habituales.

Consejos sobre rendimiento

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

Siguientes pasos