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)