Effective Go ist der Leitfaden der Go Authors für idiomatisches Go, geschrieben zur Veröffentlichung der Sprache 2009. Er behandelt Formatierung mit gofmt, Paketnamen, defer, Goroutinen und Channels („teile Speicher durch Kommunikation“), implizit erfüllte Interfaces, Fehler als Werte und Komposition durch Embedding. Für den Sprachkern taugt er weiter, wird aber nicht aktiv gepflegt und behandelt weder Modules noch Generics.
Effective Go
Details
Kernkonzepte:
- Formatierung (gofmt)
-
Code wird automatisch formatiert; Stildiskussionen werden durch Tooling eliminiert
- Paketnamen
-
Kurz, kleingeschrieben, keine Unterstriche; der Paketname ist Teil des qualifizierten Bezeichners
- Benannte Rückgabewerte
-
Rückgabewerte können benannt und als Dokumentation verwendet werden
- Defer
-
Verzögerte Funktionsaufrufe werden in LIFO-Reihenfolge ausgeführt, wenn die umgebende Funktion zurückkehrt; verwendet für Aufräumarbeiten (close, unlock)
- Goroutinen
-
Leichtgewichtige, nebenläufig ausgeführte Funktionen; „Kommuniziere nicht durch gemeinsamen Speicher; teile Speicher durch Kommunikation"
- Channels
-
Typisierte Kanäle für Goroutinen-Kommunikation; erstklassiges Synchronisierungsprimitiv
- Interfaces
-
Implizite Erfüllung — ein Typ implementiert ein Interface, indem er einfach dessen Methoden implementiert; ermöglicht Duck Typing
- Fehlerbehandlung
-
Fehler sind Werte; idiomatisches Muster ist
if err != nilan jeder Aufrufstelle; keine Exceptions - Blank Identifier (_)
-
Ungewollte Werte aus Multi-Value-Returns verwerfen, ohne Compilerfehler
- Embedding
-
Komposition statt Vererbung; Typen können andere Typen einbetten, um deren Methoden zu erhalten
- Schlüsselvertreter
-
The Go Authors (https://go.dev/doc/effective_go)
Wann zu verwenden:
-
Einarbeitung neuer Go-Entwickler in idiomatischen Go-Stil
-
Code-Review-Diskussionen über Go-Konventionen
-
Etablierung teamweiter Go-Codierungsstandards
-
Erklärung von Go-Idiomen, die sich von anderen Sprachen unterscheiden (z.B. Fehlerbehandlung, Interfaces)
-
LLM-Prompting für idiomatischen, produktionsreifen Go-Code
Aktueller Stand:
-
Nach eigener Auskunft veraltet — das Dokument beginnt mit dem Hinweis: "This document was written for Go’s release in 2009 and is not actively updated. While it remains a good guide for using the core language, it does not cover significant changes to the language (generics), ecosystem (modules), or libraries added since." Das Go-Team hat es bewusst eingefroren (golang/go #28782, weiterhin offen)
-
Es stammt aus der Zeit vor der gesamten modernen Toolchain-Ära — Modules (2018/19) und Generics (Go 1.18, 2022) — seine Ratschläge schweigen zu diesen Themen, statt beim Sprachkern falsch zu liegen
-
Moderne Ergänzungen: die kuratierten Go Code Review Comments (Selbstbeschreibung: "supplement to Effective Go") und Googles gepflegte Go-Style-Reihe (Guide, Decisions, Best Practices)