Utilizzare il driver database/SQL Spanner

database/sql di Go è un'interfaccia generica per i database SQL (o simili a SQL) per il linguaggio di programmazione Go. Per utilizzare database/sql con la tua applicazione, utilizza il driver database/sql di Spanner.

Il driver database/sql di Spanner supporta sia i database con dialetto GoogleSQL sia quelli con dialetto PostgreSQL.

Installare il driver database/sql di Spanner

Per utilizzare il driver database/sql di Spanner nella tua applicazione, aggiungi il seguente modulo al file go.mod:

  github.com/googleapis/go-sql-spanner

Utilizzare il driver database/sql di Spanner

Per creare una connessione database/sql a un database Spanner, utilizza spanner come nome del driver e un nome di database completo come stringa di connessione:

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
}

Per saperne di più, consulta il repository GitHub del driver database/sql di Spanner.

Funzionalità supportate

La directory del codice degli esempi di database/sql di Spanner in Go contiene esempi pronti per l'esecuzione per le funzionalità di Spanner di uso comune.

Suggerimenti sulle prestazioni

Per ottenere le migliori prestazioni possibili quando utilizzi il driver database/sql di Spanner, segui queste best practice:

Passaggi successivi

  • Scopri di più sull'utilizzo di Spanner con gli esempi di codice del driver database/sql .
  • Scopri di più su database/sql.
  • Utilizza GORM con Spanner.
  • Invia una segnalazione su GitHub per segnalare una richiesta di funzionalità o un bug oppure per porre una domanda sul driver database/sql di Spanner.