Go-Entwicklungsmuster
Erforderlicher Arbeitsablauf
Für Überprüfungen verwandte Fähigkeiten einbeziehen: security-audit (OWASP), enterprise-readiness (OpenSSF/SLSA), github-project (Branch-Schutz). Alle sind erforderlich.
Kernprinzipien
Typsicherheit
- Vermeiden:
interface{}(verwendeany),sync.Map, verstreute Typ-Assertions, Reflektion - Bevorzugen: Generics
[T any],errors.AsType[T](Go 1.26), konkrete Typen - Führe
go fix ./...nach Upgrades aus
Konsistenz
- Ein Muster pro Problemdomäne
- An vorhandene Codebase-Muster anpassen
- Entweder ganzheitlich refaktorieren oder gar nicht
- Konfigurationspriorität: Standardwerte < Konfigurationsdatei < Umgebungsvariablen < Flags
Testen
- Build-Tags isolieren Teststufen: Unit (Standard),
integration,e2e - Immer
t.Parallel(),t.Helper(), tabellengesteuerte Subtests verwenden log/slogdirekt verwenden – niemals in benutzerdefinierten Logger-Interfaces kapseln
Konventionen
- Fehler: Kleinbuchstaben, keine Satzzeichen (
errors.New("ungültige Eingabe")) - Benennung: ID, URL, HTTP (nicht Id, Url, Http)
- Fehlerweitergabe:
fmt.Errorf("Fehler bei Verarbeitung: %w", err)
Referenzen
Git-Hooks: ls lefthook.yml 2>/dev/null && lefthook install || echo "Füge lefthook hinzu – siehe references/lefthook-template.md"
Nach Bedarf laden:
| Referenz | Zweck |
|---|---|
references/architecture.md | Paketstruktur, Konfigurationsverwaltung, Middleware-Ketten |
references/logging.md | Strukturiertes Logging mit log/slog, Migration von logrus |
references/cron-scheduling.md | go-cron-Muster: benannte Jobs, Laufzeit-Updates, Kontext, Resilienz |
references/resilience.md | Wiederholungslogik, Graceful Shutdown, Kontextweitergabe |
references/docker.md | Docker-Client-Muster, Buffer-Pooling |
references/ldap.md | LDAP/Active Directory-Integration |
references/testing.md | Teststrategien, Build-Tags, tabellengesteuerte Tests |
references/linting.md | golangci-lint v2, staticcheck, Codequalität |
references/api-design.md | Bitmask-Optionen, funktionale Optionen, Builder |
references/fuzz-testing.md | Go-Fuzzing-Muster, Sicherheitsseeds |
references/contracts-and-invariants.md | Verträge, Invarianten, Property-Tests |
references/mutation-testing.md | Gremlins-Konfiguration, Testqualitätsmessung |
references/makefile.md | Standard-Makefile-Schnittstelle für CI/CD |
references/modernization.md | Go 1.26-Modernisierer, go fix, errors.AsType[T], wg.Go() |
references/lefthook-template.md | Fertig nutzbare lefthook.yml für Go-Projekt-Git-Hooks |
references/reusable-workflows.md | Wiederverwendbare Actions-Workflow-Aufrufer, Berechtigungsweitergabe, Release-Gate-Ausgaben |
references/single-build-release.md | Single-Build-Release: einmal cross-kompilieren, für Release+Container wiederverwenden |
references/awesome-go-submission.md | awesome-go-Einreichung: CI-geparster PR-Text, Eintragsformat, Namenskollisionen |
Qualitäts-Gates
Vor Abschluss einer Überprüfung ausführen:
golangci-lint run --timeout 5m # Linting
go vet ./... # Statische Analyse
staticcheck ./... # Zusätzliche Prüfungen
govulncheck ./... # Sicherheitsscan
go test -race ./... # Race-Erkennung
Behebung von Standardbibliothek-Schwachstellen
Wenn govulncheck Schwachstellen in der Standardbibliothek meldet: Fix-Version über vuln.go.dev prüfen, go X.Y.Z in go.mod aktualisieren, go mod tidy ausführen. PR-Branches für Repos mit Branch-Schutz verwenden.
Mitwirken: Verbesserungen einreichen unter https://github.com/netresearch/go-development-skill