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)