Structure d'un projet
Contexte
Section intitulée « Contexte »Contrairement à beaucoup de langages, Go n’impose pas de structure de projet rigide. Cependant, la communauté a adopté des conventions qui fonctionnent bien pour les petits comme pour les grands projets. La règle la plus importante : restez simple.
Structure minimale (pour un seul exécutable)
Section intitulée « Structure minimale (pour un seul exécutable) »monprojet/├── go.mod├── go.sum└── main.goStructure recommandée pour les projets plus gros
Section intitulée « Structure recommandée pour les projets plus gros »monprojet/├── cmd/│ ├── monapp/ # package main de l'application│ │ └── main.go│ └── autreoutil/ # un autre exécutable│ └── main.go├── internal/ # packages privés (non importables par d'autres modules)│ └── monhelper/│ └── helper.go├── pkg/ # packages publics que d'autres modules peuvent importer│ └── mabibliotheque/│ └── lib.go├── api/ # définitions d'API (OpenAPI, proto gRPC, etc.)├── web/ # ressources web (templates, fichiers statiques)├── scripts/ # scripts de construction, etc.├── test/ # fichiers de test externes├── go.mod└── go.sumExplication des dossiers clés
Section intitulée « Explication des dossiers clés »cmd/– Contient les commandes exécutables. Chaque sous‑dossier est un packagemaindistinct.internal/– Code privé à ce module. Aucun autre module ne peut l’importer.pkg/– Code public destiné à être utilisé par d’autres modules.api/– Fichiers de contrat d’API (ex. Protocol Buffers, spécifications OpenAPI).web/– Fichiers statiques, templates, etc.
Structure minimale pour un outil en ligne de commande.
Code exemple
Section intitulée « Code exemple »moncli/├── go.mod├── main.go