Monorepo avec Go : organisation du code pour des projets évolutifs

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Monorepo avec Go : organisation efficace du code



Dans le développement logiciel moderne, le choix de la stratégie de gestion du code est l'un des facteurs clés influençant la productivité de l'équipe et l'évolutivité du projet. Monorepo est une approche où le code de tous les services, bibliothèques et outils est stocké dans un seul dépôt. Combiné au langage Go, qui a été conçu dès le départ pour les grands projets, le monorepo devient un outil puissant.



Dans cet article, nous verrons comment organiser correctement un monorepo en Go : de la structure de répertoires de base à la gestion des dépendances avec Go Workspace. Vous apprendrez à éviter les erreurs typiques et à construire une architecture qui grandira avec votre projet.



Pourquoi le monorepo et Go sont-ils un duo idéal ?



Go (Golang) est réputé pour sa simplicité et son efficacité. Cependant, lorsqu'on travaille avec des microservices ou de grandes bibliothèques, la question se pose : comment organiser le code pour qu'il reste facile à maintenir et à refactoriser ?



Avantages du monorepo pour Go :

  • Version unique des dépendances : tous les services utilisent les mêmes versions des bibliothèques, ce qui élimine les conflits.
  • Refactorisation simplifiée : la modification d'une API dans une bibliothèque se répercute immédiatement chez tous les consommateurs.
  • Intégrité des commits : les modifications dans différentes parties du projet peuvent être regroupées en un seul commit, ce qui facilite les rollbacks.
  • Standardisation : des règles unifiées de linting, de test et de CI/CD pour l'ensemble du projet.


De plus, Go fournit des outils intégrés — les modules (go mod) et le workspace (go work), qui sont parfaitement adaptés au travail avec un monorepo.



Structure de base d'un monorepo en Go



Une structure de répertoires correcte est la base d'un monorepo réussi. Examinons l'organisation recommandée à l'aide d'un exemple de projet avec plusieurs microservices et une bibliothèque partagée.



myproject/├── apps/│   ├── api-gateway/│   │   ├── cmd/│   │   │   └── main.go│   │   ├── internal/│   │   ├── go.mod│   │   └── go.sum│   ├── user-service/│   │   ├── cmd/│   │   └── internal/│   └── order-service/│       ├── cmd/│       └── internal/├── libs/│   ├── common/│   │   ├── logger/│   │   ├── config/│   │   ├── go.mod│   │   └── go.sum│   └── db/│       ├── models/│       ├── migrations/│       ├── go.mod│       └── go.sum├── scripts/│   ├── build.sh│   └── deploy.sh├── go.work├── Makefile├── .golangci.yml└── README.md


Explications de la structure :

  • apps/ — contient les applications exécutables (microservices, utilitaires CLI). Chaque service est un module Go séparé avec son propre go.mod.
  • libs/ — bibliothèques à usage général, réutilisées entre les services.
  • scripts/ — scripts auxiliaires pour la construction, les tests et le déploiement.
  • go.work — fichier workspace qui relie tous les modules dans un espace de développement unique.


Important : ne placez pas le code directement à la racine du dépôt. Utilisez des sous-répertoires pour regrouper par fonction.



Gestion des dépendances avec Go Workspace



Depuis la version Go 1.18, la prise en charge du workspace (espace de travail) est disponible. C'est une fonctionnalité clé pour le monorepo, permettant de développer plusieurs modules simultanément sans avoir à les publier dans un registre distant.



Création d'un workspace :

# Initialisation du workspace à la racine du projetgo work init ./apps/api-gateway ./apps/user-service ./libs/common

# Ajout d'un nouveau modulego work use ./apps/order-service

# Affichage du workspace actuelgo work edit -json


Contenu du fichier go.work

Blogs

Book Recommendations