database/sql e driver
Configurazione del database, QueryRow, Scan e pool di connessioni
database/sql e driver è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Panoramica di database/sql
database/sql è il livello standard di astrazione per i database di Go. Gestisce un pool di connessioni e funziona con qualsiasi database tramite un plugin driver.
Registrazione di un driver
Importi il pacchetto del driver per i suoi effetti collaterali (registrazione del driver). Quindi apra una connessione:
import _ "github.com/lib/pq" // PostgreSQL driver
db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil { log.Fatal(err) }
defer db.Close()sql.Open e db.Ping
sql.Open non si connette al database: convalida il DSN. Chiami db.Ping() o db.PingContext(ctx) per verificare che la connessione sia attiva.
if err := db.Ping(); err != nil { log.Fatal(err) }Esecuzione di query sulle righe
Utilizzi db.QueryContext per eseguire una SELECT e analizzare le righe:
rows, err := db.QueryContext(ctx, "SELECT id, name FROM users WHERE active = $1", true)
if err != nil { return err }
defer rows.Close()
for rows.Next() {
var id int; var name string
rows.Scan(&id, &name)
}Query per una singola riga
db.QueryRowContext restituisce un *Row per le query che dovrebbero restituire al massimo un risultato:
var name string
err := db.QueryRowContext(ctx, "SELECT name FROM users WHERE id = $1", id).Scan(&name)
if errors.Is(err, sql.ErrNoRows) { /* not found */ }Esecuzione di modifiche
Utilizzi db.ExecContext per INSERT, UPDATE e DELETE. Restituisce un Result con il numero di righe interessate e l'ID dell'ultimo inserimento.
result, err := db.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", name)
if err != nil { return err }
id, _ := result.LastInsertId()Istruzioni preparate
Prepari un'istruzione una volta ed esegua molte volte in modo efficiente:
stmt, err := db.PrepareContext(ctx, "SELECT id FROM users WHERE email = $1")
defer stmt.Close()
for _, email := range emails {
row := stmt.QueryRowContext(ctx, email)
}Impostazioni del pool di connessioni
Configuri il pool per la produzione:
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(5 * time.Minute)Controllo di rows.Err()
Dopo il ciclo sulle righe, controlli sempre rows.Err(): il ciclo potrebbe essersi interrotto prima del termine a causa di un errore di rete.
if err := rows.Err(); err != nil { return err }Valori NULL
Utilizzi sql.NullString, sql.NullInt64 e così via per gestire i valori NULL del database, che altrimenti causerebbero un panic quando vengono analizzati in un tipo Go non puntatore.
var bio sql.NullString
rows.Scan(&bio)
if bio.Valid { fmt.Println(bio.String) }Elenco dei driver
Driver diffusi: github.com/lib/pq (PostgreSQL), github.com/go-sql-driver/mysql (MySQL), modernc.org/sqlite (SQLite, interamente in Go).
Verifica rapida
Perché è necessario chiamare sempre rows.Close() e controllare rows.Err() dopo una query?
Riepilogo: database/sql
Punti chiave:
- Importare il driver con _ per gli effetti collaterali; sql.Open + Ping
- QueryContext → rows.Next + Scan + rows.Close + rows.Err
- ExecContext per le modifiche; QueryRowContext per le singole righe
- SetMaxOpenConns, SetMaxIdleConns, SetConnMaxLifetime per il pool
Domande Frequenti
La lezione «database/sql e driver» è gratuita?
Sì — il testo completo di «database/sql e driver» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «database/sql e driver»?
Configurazione del database, QueryRow, Scan e pool di connessioni Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «database/sql e driver»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- database/sql e driver
- sqlx: scansione delle struct e query con nome
- pgx: driver PostgreSQL ad alte prestazioni
- Transazioni e migrazioni