Patterns de développement Go
Workflow requis
Pour les revues, invoquez les compétences associées : security-audit (OWASP), enterprise-readiness (OpenSSF/SLSA), github-project (protection de branches). Toutes sont requises.
Principes fondamentaux
Sécurité des types
- Évitez :
interface{}(utilisezany),sync.Map, assertions de type éparpillées, réflexion - Préférez : les generics
[T any],errors.AsType[T](Go 1.26), les types concrets - Exécutez
go fix ./...après les mises à niveau
Cohérence
- Un seul pattern par domaine de problème
- Respectez les patterns existants du codebase
- Refactorisez de manière holistique ou pas du tout
- Priorité de configuration : valeurs par défaut < fichier de config < variables d'environnement < flags
Tests
- Les tags de build isolent les niveaux de tests : unitaires (par défaut),
integration,e2e - Utilisez toujours
t.Parallel(),t.Helper(), les sous-tests table-driven - Utilisez
log/slogdirectement – ne l'encapsulez jamais dans des interfaces Logger personnalisées
Conventions
- Erreurs : minuscules, sans ponctuation (
errors.New("invalid input")) - Nommage : ID, URL, HTTP (pas Id, Url, Http)
- Encapsulation des erreurs :
fmt.Errorf("failed to process: %w", err)
Références
Hooks Git : ls lefthook.yml 2>/dev/null && lefthook install || echo "Ajoutez lefthook — voir references/lefthook-template.md"
Chargez selon les besoins :
| Référence | Objectif |
|---|---|
references/architecture.md | Structure des packages, gestion de configuration, chaînes de middleware |
references/logging.md | Journalisation structurée avec log/slog, migration depuis logrus |
references/cron-scheduling.md | Patterns go-cron : tâches nommées, mises à jour à chaud, contexte, résilience |
references/resilience.md | Logique de réessai, arrêt gracieux, propagation du contexte |
references/docker.md | Patterns du client Docker, mise en commun des buffers |
references/ldap.md | Intégration LDAP/Active Directory |
references/testing.md | Stratégies de test, tags de build, tests table-driven |
references/linting.md | golangci-lint v2, staticcheck, qualité du code |
references/api-design.md | Options de masque de bits, options fonctionnelles, builders |
references/fuzz-testing.md | Patterns de fuzzing Go, seeds de sécurité |
references/contracts-and-invariants.md | Contrats, invariants, tests de propriétés |
references/mutation-testing.md | Configuration Gremlins, mesure de la qualité des tests |
references/makefile.md | Interface Makefile standard pour CI/CD |
references/modernization.md | Modernisateurs Go 1.26, go fix, errors.AsType[T], wg.Go() |
references/lefthook-template.md | Fichier lefthook.yml prêt à l'emploi pour les hooks Git des projets Go |
references/reusable-workflows.md | Appels de workflows Actions réutilisables, propagation des permissions, sorties de release-gate |
references/single-build-release.md | Construction unique pour release : cross-compilation une fois, réutilisation pour release+conteneur |
references/awesome-go-submission.md | Soumission awesome-go : corps de PR parsé par CI, format d'entrée, collisions de noms |
Portes de qualité
Exécutez avant de terminer toute revue :
golangci-lint run --timeout 5m # Linting
go vet ./... # Analyse statique
staticcheck ./... # Vérifications supplémentaires
govulncheck ./... # Scan de vulnérabilités
go test -race ./... # Détection de courses
Corrections de vulnérabilités de la stdlib
Quand govulncheck signale des vulnérabilités dans la stdlib : vérifiez la version de correctif via vuln.go.dev, mettez à jour go X.Y.Z dans go.mod, exécutez go mod tidy. Utilisez des branches PR pour les dépôts avec protection de branches.
Contribuer : Soumettez des améliorations sur https://github.com/netresearch/go-development-skill