Zeilen abfragen
Ergebnismengen lesen
Zeilen abfragen ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.
Ergebnismengen abfragen
Verwenden Sie Query für Anweisungen, die Zeilen zurückgeben, etwa SELECT. Die Methode gibt ein *sql.Rows zurück, über das Sie iterieren. Für einen einzelnen Wert ist QueryRow einfacher.
db.Query
Query sendet das SQL und gibt Zeilen sowie einen Fehler zurück. Prüfen Sie den Fehler immer, bevor Sie die Zeilen verwenden.
rows, err := db.Query("SELECT id, name FROM users WHERE active = $1", true)
if err != nil {
log.Fatal(err)
}Immer rows.Close() per defer aufrufen
Die Zeilen halten eine Datenbankverbindung, bis sie geschlossen werden. defer rows.Close() gibt sie an den Pool zurück. Wenn Sie dies vergessen, gehen unter Last Verbindungen verloren.
defer rows.Close()Mit rows.Next iterieren
rows.Next() wechselt zur nächsten Zeile und gibt false zurück, wenn keine weitere vorhanden ist. Innerhalb der Schleife rufen Sie Scan auf, um Spaltenwerte in Variablen zu kopieren.
for rows.Next() {
var id int
var name string
if err := rows.Scan(&id, &name); err != nil {
log.Fatal(err)
}
fmt.Println(id, name)
}Scan erwartet Zeiger
Scan schreibt in die übergebenen Variablen. Daher müssen Sie Zeiger übergeben (&id, &name). Anzahl und Reihenfolge der Zeiger müssen mit den ausgewählten Spalten übereinstimmen.
rows.Err prüfen
Die Schleife kann enden, weil keine Daten mehr vorhanden sind oder weil während der Iteration ein Fehler aufgetreten ist. Rufen Sie nach der Schleife rows.Err() auf, um einen solchen Fehler zu erkennen.
if err := rows.Err(); err != nil {
log.Fatal(err)
}QueryRow für eine Zeile
Wenn Sie genau eine Zeile erwarten, sind QueryRow und Scan übersichtlicher. Wenn keine Zeile übereinstimmt, gibt Scan sql.ErrNoRows zurück.
var name string
err := db.QueryRow("SELECT name FROM users WHERE id = $1", 7).Scan(&name)
if err == sql.ErrNoRows {
fmt.Println("not found")
}Eine ausführbare Scan-Simulation
Für echte Abfragen wird eine Datenbank benötigt. Daher bildet dieses ausführbare Beispiel den Ablauf aus Query, Next und Scan über einem In-Memory-Slice ab, um das Iterationsmuster zu zeigen.
package main
import "fmt"
type Row struct {
ID int
Name string
}
func main() {
rows := []Row{{1, "Ada"}, {2, "Lin"}, {3, "Guido"}}
for i := 0; i < len(rows); i++ {
var id int
var name string
id = rows[i].ID
name = rows[i].Name
fmt.Printf("id=%d name=%s\n", id, name)
}
fmt.Println("scanned", len(rows), "rows")
}NULL-Werte behandeln
Eine NULL-Spalte kann nicht in einen einfachen String oder int gescannt werden. Verwenden Sie sql.NullString, sql.NullInt64 oder einen Zeigertyp, damit der Code NULL von einem leeren Wert unterscheiden kann.
var email sql.NullString
rows.Scan(&email)
if email.Valid {
fmt.Println(email.String)
}In Structs scannen
Die Standardbibliothek scannt in einzelne Variablen, nicht in vollständige Structs. Ordnen Sie Spalten den Struct-Feldern zu, indem Sie &u.ID, &u.Name übergeben. Bibliotheken wie sqlx automatisieren dies.
SELECT * vermeiden
Listen Sie Spalten ausdrücklich auf, damit die Reihenfolge für Scan stabil bleibt. Eine Schemaänderung, die eine Spalte hinzufügt, führt bei einem positionsbasierten Scan unbemerkt zu Fehlern, wenn Sie sich auf SELECT * verlassen haben.
Kurztest
Testen Sie Ihr Wissen über Abfragen.
Zusammenfassung
Sie haben gelernt, Zeilen abzufragen:
- Query gibt *sql.Rows zurück; rows.Close() per defer aufrufen
- Mit rows.Next iterieren und die Werte per Scan in Zeiger kopieren
- Nach der Schleife rows.Err() prüfen
- QueryRow für einzelne Zeilen; sql.ErrNoRows bei keinem Treffer
- Für nullable Spalten Null-Typen verwenden
Häufig gestellte Fragen
Ist die Lektion „Zeilen abfragen“ kostenlos?
Ja — der vollständige Text von „Zeilen abfragen“ 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 „Zeilen abfragen“?
Ergebnismengen lesen 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 2 von 4.
Wie lange dauert die Lektion „Zeilen abfragen“?
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
- Eine Verbindung öffnen
- Zeilen abfragen
- Prepared Statements
- Transaktionen