Aller au contenu

Structure d'un projet

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.

monprojet/
├── go.mod
├── go.sum
└── main.go
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.sum
  • cmd/ – Contient les commandes exécutables. Chaque sous‑dossier est un package main distinct.
  • 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.

Fenêtre de terminal
moncli/
├── go.mod
├── main.go