🔄 1. Die einzige Schleife in Go: for
Go verzichtet bewusst auf while und do-while. Das Schlüsselwort for deckt alle 4 Schleifenformen ab:
// 1. Klassischer 3-Komponenten-Loop:
for i := 0; i < 5; i++ {
fmt.Println("Index:", i)
}
// 2. While-Äquivalent (Bedingungsschleife):
aktiveVerbindungen := 10
for aktiveVerbindungen > 0 {
aktiveVerbindungen--
}
// 3. Endlosschleife (z.B. Event-Loop / Polling):
for {
// break oder return zum Verlassen
break
}
// 4. Iteration über Slices & Maps mit range:
cluster := []string{"node-a", "node-b"}
for index, node := range cluster {
fmt.Printf("[%d] -> %s\n", index, node)
}
Statt 5 verschiedenen Spezialzangen für jede Schraube gibt dir Go ein einziges, perfekt kalibriertes Werkzeug: for. Egal ob du zählst, auf ein Signal wartest oder eine Map durchläufst – das mentale Modell bleibt immer identisch und fehlerfrei.
🛡️ 2. if mit Initialisierungs-Statement (Scope-Einschränkung)
Go erlaubt es, direkt vor der Bedingung eine Variable zu deklarieren. Deren Gültigkeitsbereich (Scope) ist strikt auf den if/else-Block beschränkt:
// Variable 'err' existiert nur innerhalb von if und else!
if err := executeTask(); err != nil {
fmt.Println("Fehler aufgetreten:", err)
return
}
// Außerhalb ist 'err' nicht mehr existent – kein Scope-Pollution!
🔀 3. Leistungsfähiges switch ohne Break-Falle
In Go bricht jeder case automatisch ab – kein gefürchteter Fallthrough wie in C oder Java! Außerdem können Bedingungen direkt ausgewertet werden:
status := 404
switch status {
case 200, 201:
fmt.Println("Erfolg")
case 400, 401, 404:
fmt.Println("Client-Fehler")
case 500, 502:
fmt.Println("Server-Fehler")
default:
fmt.Println("Unbekannter Statuscode")
}
// Tagless switch (Ersatz für lange if-else Ketten):
switch {
case alter < 18:
fmt.Println("Minderjährig")
case alter >= 67:
fmt.Println("Ruhestand")
default:
fmt.Println("Erwerbstätig")
}