database/sql en drivers
Database-instelling, QueryRow, Scan en connectionpools
database/sql en drivers is een gratis Go Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Go Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Go Academy bevat in totaal 4 lessen.
Overzicht van database/sql
database/sql is de standaardabstractielaag van Go voor databases. Deze beheert een verbindingspool en werkt met elke database via een stuurprogramma-plug-in.
Een stuurprogramma registreren
Importeer het pakket van het stuurprogramma vanwege de bijwerkingen ervan (registratie van het stuurprogramma). Open daarna een verbinding:
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 versus db.Ping
sql.Open maakt geen verbinding — deze valideert de DSN. Roep db.Ping() of db.PingContext(ctx) aan om te controleren of de verbinding actief is.
if err := db.Ping(); err != nil { log.Fatal(err) }Rijen opvragen
Gebruik db.QueryContext om een SELECT uit te voeren en rijen te scannen:
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)
}Een enkele rij opvragen
db.QueryRowContext retourneert een *Row voor query's waarvan je verwacht dat ze hoogstens één resultaat opleveren:
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 */ }Mutaties uitvoeren
Gebruik db.ExecContext voor INSERT, UPDATE en DELETE. Deze retourneert een Result met het aantal gewijzigde rijen en de ID van de laatste invoeging.
result, err := db.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", name)
if err != nil { return err }
id, _ := result.LastInsertId()Voorbereide statements
Bereid een statement één keer voor en voer het daarna efficiënt vele malen uit:
stmt, err := db.PrepareContext(ctx, "SELECT id FROM users WHERE email = $1")
defer stmt.Close()
for _, email := range emails {
row := stmt.QueryRowContext(ctx, email)
}Instellingen van de verbindingspool
Configureer de pool voor productie:
db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(5 * time.Minute)rows.Err() controleren
Controleer na de rijenlus altijd rows.Err() — de lus kan voortijdig zijn beëindigd door een netwerkfout.
if err := rows.Err(); err != nil { return err }Nullwaarden
Gebruik sql.NullString, sql.NullInt64 enzovoort om NULL-waarden uit de database te verwerken. Anders kan het scannen naar een Go-type dat geen pointer is een panic veroorzaken.
var bio sql.NullString
rows.Scan(&bio)
if bio.Valid { fmt.Println(bio.String) }Lijst met stuurprogramma's
Populaire stuurprogramma's: github.com/lib/pq (PostgreSQL), github.com/go-sql-driver/mysql (MySQL), modernc.org/sqlite (SQLite, volledig in Go).
Kennischeck
Waarom moet je na een query altijd rows.Close() aanroepen en rows.Err() controleren?
Samenvatting: database/sql
Belangrijkste punten:
- Importeer het stuurprogramma met _ vanwege de bijwerkingen; sql.Open + Ping
- QueryContext → rows.Next + Scan + rows.Close + rows.Err
- ExecContext voor mutaties; QueryRowContext voor enkele rijen
- SetMaxOpenConns, SetMaxIdleConns, SetConnMaxLifetime voor de pool
Leer Go met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 51
- Lessen
- 203
Veelgestelde vragen
Is de les “database/sql en drivers” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Go Academy, waaronder “database/sql en drivers”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Go Academy bevat in totaal 4 lessen.
Wat leer ik in “database/sql en drivers”?
Database-instelling, QueryRow, Scan en connectionpools Je oefent met Go Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Go Academy te beginnen?
Ervaring vooraf is niet nodig. Go Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “database/sql en drivers”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Go Academy?
Ja. Elke les over Go Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- database/sql en drivers
- sqlx: structs scannen en benoemde queries
- pgx: snelle PostgreSQL-driver
- Transacties en migraties