Usa el controlador de SQL o la base de datos de Spanner

Go database/sql es una interfaz genérica en torno a 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 bases de datos con dialecto de PostgreSQL.

Instala el controlador database/sql de Spanner

Para usar el controlador database/sql de Spanner en tu aplicación, agrega el siguiente módulo a tu archivo go.mod:

  github.com/googleapis/go-sql-spanner

Usa el controlador database/sql de Spanner

Para crear una conexión database/sql a una base de datos de Spanner, usa spanner como el nombre del controlador y un nombre de base de datos completamente calificado como la 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 cast(@greeting as string)", "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 admitidas

El directorio de código de ejemplos de database/sql de Go de Spanner contiene ejemplos listos para ejecutar para las funciones de Spanner de uso frecuente.

Sugerencias para un mejor rendimiento

Para obtener el mejor rendimiento posible cuando uses el controlador database/sql de Spanner, sigue estas prácticas recomendadas:

¿Qué sigue?

  • Obtén más información para usar Spanner con los ejemplos de código del controlador database/sql .
  • Obtén más información sobre database/sql.
  • Usa GORM con Spanner.
  • Presenta un problema en GitHub para informar una solicitud de función o un error, o para hacer una pregunta sobre el controlador database/sql de Spanner.