Introduction : Pourquoi pourriez-vous avoir besoin d'un commit « vivant »
\nAvez-vous déjà écrit du code en Go, ajouté une bibliothèque via go get, pour ensuite découvrir que son auteur a corrigé un bug critique, mais n'a pas encore publié de nouveau tag (release) ? Ou peut-être développez-vous vous-même une bibliothèque et souhaitez-vous la tester dans votre projet principal avant de publier une version ?
Dans les modules Go, il existe une fonctionnalité intéressante : vous pouvez spécifier dans go.mod non seulement un numéro de version (v1.2.3), mais aussi un commit spécifique du dépôt Git. Cela permet de travailler avec la version la plus récente du code, même si elle n'est pas encore encapsulée dans un tag de release.
Cet article est une traduction et une adaptation de l'une des questions les plus populaires sur Stack Overflow dans le monde Go. Nous allons voir comment faire cela correctement, quels sont les pièges à éviter et comment ne pas casser votre build.
\n\nQu'est-ce que go.mod et pourquoi y mettre des commits ?
\ngo.mod est un fichier situé à la racine de votre projet Go. Il décrit toutes les dépendances (modules) nécessaires à votre application. En général, les lignes ressemblent à ceci :
require (\n github.com/someuser/somelib v1.2.3\n)\nMais que faire si la fonctionnalité dont vous avez besoin n'est pas dans v1.2.3, mais seulement dans le dernier commit de la branche main ? En Go, cela se résout avec des pseudo-versions.
Qu'est-ce qu'une pseudo-version ?
\nC'est une chaîne spéciale qui remplace un numéro de version classique. Elle se compose de :
\n- \n
- La version de base (s'il existe un tag à partir duquel la branche a divergé) \n
- L'horodatage du commit (au format
yyyymmddhhmmss) \n - Le hash du commit (les 12 premiers caractères) \n
Exemple : v0.0.0-20250320120000-abc123def456
Ne vous laissez pas effrayer par cette longue chaîne — elle est presque toujours générée par l'outil go lui-même.
Méthode n°1 : Utiliser go get avec le flag @latest
\nC'est la méthode la plus simple et la plus sûre. Vous dites simplement à Go : « Prends la version la plus récente du dépôt ».
\nÉtape 1 : Ouvrez un terminal à la racine de votre projet.
\nÉtape 2 : Exécutez la commande :
\ngo get github.com/someuser/somelib@latest\nEnsuite, Go fera ceci :
\n- \n
- Téléchargera le dernier commit de la branche par défaut (généralement
mainoumaster). \n - Générera une pseudo-version. \n
- Mettra automatiquement à jour
go.modetgo.sum. \n
Résultat dans go.mod :
require (\n github.com/someuser/somelib v0.0.0-20250320120000-abc123def456\n)\nTerminé ! Vous venez de lier votre projet au commit le plus récent.
\n\nSi vous devez spécifier un hash de commit précis
\nSi vous connaissez le hash exact (par exemple, abc123def456789), vous pouvez le substituer directement :
go get github.com/someuser/somelib@abc123def456789\nGo le transformera lui-même en pseudo-version.
\n\nMéthode n°2 : Modification manuelle de go.mod
\nParfois, vous devez modifier le fichier manuellement (par exemple, si vous n'avez pas accès au terminal ou si vous écrivez un script CI).
\nÉtape 1 : Ouvrez go.mod dans n'importe quel éditeur.
Étape 2 : Trouvez la ligne avec la dépendance souhaitée et remplacez la version par latest ou par un hash spécifique.
require (\n github.com/someuser/somelib latest\n)\nÉtape 3 : Enregistrez le fichier et exécutez dans le terminal :
\ngo mod tidy\nLa commande go mod tidy téléchargera les dépendances manquantes, supprimera les superflues et remplacera le mot latest par une vraie pseudo-version.
Important : Si vous écrivez simplement un hash manuellement (par exemple, v0.0.0-abc123def456), Go pourrait générer une erreur. Il est préférable de toujours exécuter go mod tidy après des modifications manuelles.<