0Pricing
Go Academy · Lektion

Eine Verbindung öffnen

Eine Verbindung zu einer Datenbank herstellen

Eine Verbindung öffnen 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.

Das Paket database/sql

Das standardmäßige database/sql-Paket von Go stellt eine generische, datenbankunabhängige API bereit. Sie kombinieren es mit einem Treiber für Ihre konkrete Datenbank, etwa PostgreSQL oder MySQL.

  • Eine API für viele Datenbanken
  • Integrierter Verbindungspool
  • Sichere parametrisierte Abfragen

Einen Treiber importieren

Der Treiber registriert sich über einen Blank-Import. Der Unterstrich bedeutet, dass Sie ihn nur wegen seines Seiteneffekts importieren – der Registrierung – und ihn nicht direkt aufrufen.

import (
    "database/sql"
    _ "github.com/lib/pq"
)

sql.Open

sql.Open erwartet einen Treibernamen und einen Data Source Name (DSN). Es stellt noch keine Verbindung her, sondern bereitet lediglich den Pool vor.

db, err := sql.Open("postgres", "postgres://user:pass@localhost/mydb?sslmode=disable")
if err != nil {
    log.Fatal(err)
}

db ist ein Pool

Das zurückgegebene *sql.DB ist keine einzelne Verbindung, sondern ein Pool von Verbindungen, der von vielen Goroutinen gleichzeitig sicher verwendet werden kann. Öffnen Sie ihn einmal und teilen Sie ihn in Ihrer gesamten Anwendung.

Mit Ping prüfen

Da Open verzögert arbeitet, verwenden Sie Ping, um tatsächlich eine Verbindung herzustellen und zu bestätigen, dass die Datenbank erreichbar und die Anmeldedaten gültig sind.

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

Den Pool schließen

Stellen Sie in Ihrer main- oder Setup-Funktion db.Close() per defer zurück. Sie schließen den Pool nur selten pro Abfrage, sondern erst, wenn die gesamte Anwendung beendet wird.

defer db.Close()

Pool konfigurieren

Steuern Sie den Pool mit SetMaxOpenConns, SetMaxIdleConns und SetConnMaxLifetime. Diese Einstellungen verhindern, dass die Datenbank überlastet wird, und erneuern veraltete Verbindungen.

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

Ein ausführbares In-Memory-Beispiel

Echte Treiber benötigen eine Netzwerkdatenbank. Daher zeigt dieses ausführbare Beispiel denselben Lebenszyklus mit einem simulierten Öffnen und Ping und verwendet dabei nur Typen aus der Standardbibliothek.

package main

import (
    "errors"
    "fmt"
)

type DB struct{ dsn string }

func Open(driver, dsn string) (*DB, error) {
    if dsn == "" {
        return nil, errors.New("empty dsn")
    }
    return &DB{dsn: dsn}, nil
}

func (db *DB) Ping() error { return nil }
func (db *DB) Close() error { return nil }

func main() {
    db, err := Open("postgres", "postgres://localhost/mydb")
    if err != nil {
        fmt.Println("open error:", err)
        return
    }
    defer db.Close()
    if err := db.Ping(); err != nil {
        fmt.Println("ping error:", err)
        return
    }
    fmt.Println("connected to", db.dsn)
}

Context-bewusste Varianten

Bevorzugen Sie PingContext, QueryContext und ExecContext, damit Aufrufe Fristen und Abbrüche berücksichtigen. Durch die Übergabe eines Contexts wird begrenzt, wie lange ein hängender Datenbankaufruf blockieren kann.

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
err := db.PingContext(ctx)

Das DSN-Format

Jeder Treiber definiert seinen eigenen DSN. PostgreSQL akzeptiert eine URL, MySQL verwendet user:pass@tcp(host:3306)/dbname. Prüfen Sie immer die Dokumentation des Treibers und vermeiden Sie fest einprogrammierte Anmeldedaten.

Ein Pool, langfristig verwendet

Ein häufiger Fehler besteht darin, sql.Open pro Request aufzurufen. Dadurch wird das Pooling außer Kraft gesetzt und die Anzahl der Verbindungen erschöpft. Öffnen Sie den Pool einmal beim Start, speichern Sie das *sql.DB und verwenden Sie es überall wieder.

Kurztest

Testen Sie Ihr Wissen über Datenbankverbindungen.

Zusammenfassung

Sie haben gelernt, eine Verbindung zu öffnen:

  • Importieren Sie einen Treiber per Blank-Import und rufen Sie sql.Open mit Treiber und DSN auf
  • *sql.DB ist ein nebenläufigkeitssicherer Pool, der einmal geöffnet wird
  • Ping überprüft die tatsächliche Verbindung
  • Konfigurieren Sie den Pool und verwenden Sie Context-bewusste Methoden
  • defer db.Close() beim Herunterfahren

Häufig gestellte Fragen

Ist die Lektion „Eine Verbindung öffnen“ kostenlos?

Ja — der vollständige Text von „Eine Verbindung öffnen“ 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 „Eine Verbindung öffnen“?

Eine Verbindung zu einer Datenbank herstellen 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 „Eine Verbindung öffnen“?

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. Eine Verbindung öffnen
  2. Zeilen abfragen
  3. Prepared Statements
  4. Transaktionen
← Zurück zu Go Academy