7.2. Clean Code
Clean Code in Go heißt: klarer Kontrollfluss, kleine Schnittstellen, explizite Fehler und Code, den Menschen und Werkzeuge gleichermaßen lesen können. Das Ziel ist dasselbe wie in 4. Clean Code – aber die Mittel sind andere. Go hat keine Vererbungshierarchie, kein festes Klassenmodell und keine „Clean Code“-Buchregeln als Sprachstandard. Maßgeblich sind Effective Go, die Code Review Comments und die Go Proverbs.
Eine 1:1-Übersetzung aus Java oder C++ ergibt selten idiomatisches Go. Statt Klassenbaum und Framework-Schichten: kleine Packages, Komposition und Interfaces, die der Verbraucher definiert.
type Server struct {
store Store
log *slog.Logger
}
Leitlinien:
- Clear is better than clever – offensichtlicher Ablauf vor cleveren Tricks; Reflection nur, wenn nötig.
- Errors are values – Fehler zurückgeben und prüfen, nicht verstecken.
- Composition, not inheritance – Verhalten zusammensetzen, nicht ableiten.
- Make the zero value useful –
var x Tsollte möglichst sofort brauchbar sein. - Gofmt für alle – Layout entscheiden die Werkzeuge, nicht der Geschmack.
| Seite | Inhalt |
|---|---|
| 7.2.1. Formatierung und Werkzeuge | gofmt, goimports, go vet, go fix |
| 7.2.2. Benennung und Packages | MixedCaps, Package-Namen, API-Oberfläche |
| 7.2.3. Funktionen und Fehler | Mehrfachrückgabe, Error-Pfad, Wrapping, Is / AsType |
| 7.2.4. Interfaces | Klein, consumer-seitig, Accept interfaces / return concrete |
| 7.2.5. Nebenläufigkeit und Context | Channels, Mutexes, context, Goroutine-Lebensdauer |
| 7.2.6. Dokumentation und Tests | Godoc, Beispiele, Table-driven Tests |
| 7.2.7. Einfachheit und Abstraktion | Copy vs. Dependency, Embedding, bekannte Meinungsunterschiede |
Wenn Quellen sich widersprechen, gilt diese Reihenfolge:
- Official Go (Effective Go, Code Review Comments, Release Notes, pkg.go.dev)
- Go Proverbs
- Google Go Style Guide
- Uber Go Style Guide – als Teamstil markieren, wenn strenger als Official
Robert C. Martins „Clean Code“ ist kein Go-Primärstandard. SOLID und Code Smells aus Kapitel 4 bleiben nützlich als Denkhilfe; die konkreten Idiome kommen aus den Go-Dokumenten.
Die Beispiele und Stdlib-Hinweise setzen Go 1.27 oder neuer voraus. Features, die neuer sind als die go-Zeile im Modul, gehören nicht in den Code – auch wenn sie „moderner“ wirken.