Utilizzare il driver database/SQL Spanner

Go database/sql è 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 Spannerdatabase/sql supporta sia i database con dialetto GoogleSQL sia quelli con dialetto PostgreSQL.

Installa il driver del database/SQL Spanner

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

  github.com/googleapis/go-sql-spanner

Utilizza il driver SQL/database 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 @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
}

Per maggiori informazioni, consulta il repository GitHub del driver SQL/database Spanner.

Funzionalità supportate

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

Suggerimenti sulle prestazioni

Per ottenere il miglior rendimento possibile quando utilizzi il driver database/sql di Spanner, segui queste best practice:

Passaggi successivi