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 != nil an 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)