0Pricing
Go Academy · Lektion

database/sql und Treiber

Datenbankeinrichtung, QueryRow, Scan und Connection-Pools

database/sql und Treiber ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Überblick über database/sql

database/sql ist die standardmäßige Datenbankabstraktionsschicht von Go. Sie verwaltet einen Verbindungspool und funktioniert mit jeder Datenbank über ein Treiber-Plugin.

Einen Treiber registrieren

Importieren Sie das Treiberpaket wegen seiner Seiteneffekte (Treiberregistrierung). Öffnen Sie anschließend eine Verbindung:

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 vs db.Ping

sql.Open stellt keine Verbindung her — es validiert den DSN. Rufen Sie db.Ping() oder db.PingContext(ctx) auf, um zu prüfen, ob die Verbindung aktiv ist.

if err := db.Ping(); err != nil { log.Fatal(err) }

Zeilen abfragen

Verwenden Sie db.QueryContext, um eine SELECT-Abfrage auszuführen und Zeilen auszulesen:

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)
}

Abfrage einer einzelnen Zeile

db.QueryRowContext gibt eine *Row für Abfragen zurück, die höchstens ein Ergebnis liefern sollen:

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 */ }

Mutationen ausführen

Verwenden Sie db.ExecContext für INSERT, UPDATE und DELETE. Die Methode gibt ein Result mit der Anzahl betroffener Zeilen und der ID des letzten Inserts zurück.

result, err := db.ExecContext(ctx, "INSERT INTO users(name) VALUES($1)", name)
if err != nil { return err }
id, _ := result.LastInsertId()

Vorbereitete Anweisungen

Bereiten Sie eine Anweisung einmal vor und führen Sie sie anschließend effizient mehrfach aus:

stmt, err := db.PrepareContext(ctx, "SELECT id FROM users WHERE email = $1")
defer stmt.Close()
for _, email := range emails {
    row := stmt.QueryRowContext(ctx, email)
}

Einstellungen des Verbindungspools

Konfigurieren Sie den Pool für die Produktion:

db.SetMaxOpenConns(25)
db.SetMaxIdleConns(25)
db.SetConnMaxLifetime(5 * time.Minute)

rows.Err() prüfen

Prüfen Sie nach der Zeilenschleife immer rows.Err() — die Schleife könnte aufgrund eines Netzwerkfehlers vorzeitig beendet worden sein.

if err := rows.Err(); err != nil { return err }

NULL-Werte

Verwenden Sie sql.NullString, sql.NullInt64 usw., um Datenbank-NULL-Werte zu verarbeiten, die andernfalls beim Einlesen in einen nicht als Pointer vorliegenden Go-Typ eine Panic auslösen würden.

var bio sql.NullString
rows.Scan(&bio)
if bio.Valid { fmt.Println(bio.String) }

Treiberliste

Beliebte Treiber: github.com/lib/pq (PostgreSQL), github.com/go-sql-driver/mysql (MySQL), modernc.org/sqlite (SQLite, reines Go).

Kurzer Test

Warum müssen Sie nach einer Abfrage immer rows.Close() aufrufen und rows.Err() prüfen?

Zusammenfassung: database/sql

Wichtige Punkte:

  • Treiber mit _ wegen der Seiteneffekte importieren; sql.Open + Ping
  • QueryContext → rows.Next + Scan + rows.Close + rows.Err
  • ExecContext für Mutationen; QueryRowContext für einzelne Zeilen
  • SetMaxOpenConns, SetMaxIdleConns, SetConnMaxLifetime für den Pool

Häufig gestellte Fragen

Ist die Lektion „database/sql und Treiber“ kostenlos?

Ja — der vollständige Text von „database/sql und Treiber“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „database/sql und Treiber“?

Datenbankeinrichtung, QueryRow, Scan und Connection-Pools Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Go Academy zu starten?

Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „database/sql und Treiber“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?

Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. database/sql und Treiber
  2. sqlx: Struct-Scanning und benannte Abfragen
  3. pgx: PostgreSQL-Treiber für hohe Leistung
  4. Transaktionen und Migrationen
← Zurück zu Go Academy