Comment spécifier le dernier commit d'un dépôt dans go.mod ? Guide

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

Introduction : Pourquoi pourriez-vous avoir besoin d'un commit « vivant »

\n

Avez-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 ?

\n

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.

\n

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\n

Qu'est-ce que go.mod et pourquoi y mettre des commits ?

\n

go.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 :

\n
require (\n    github.com/someuser/somelib v1.2.3\n)
\n

Mais 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.

\n\n

Qu'est-ce qu'une pseudo-version ?

\n

C'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
\n

Exemple : v0.0.0-20250320120000-abc123def456

\n

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.

\n\n

Méthode n°1 : Utiliser go get avec le flag @latest

\n

C'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 :

\n
go get github.com/someuser/somelib@latest
\n

Ensuite, Go fera ceci :

\n
    \n
  • Téléchargera le dernier commit de la branche par défaut (généralement main ou master).
  • \n
  • Générera une pseudo-version.
  • \n
  • Mettra automatiquement à jour go.mod et go.sum.
  • \n
\n

Résultat dans go.mod :

\n
require (\n    github.com/someuser/somelib v0.0.0-20250320120000-abc123def456\n)
\n

Terminé ! Vous venez de lier votre projet au commit le plus récent.

\n\n

Si vous devez spécifier un hash de commit précis

\n

Si vous connaissez le hash exact (par exemple, abc123def456789), vous pouvez le substituer directement :

\n
go get github.com/someuser/somelib@abc123def456789
\n

Go le transformera lui-même en pseudo-version.

\n\n

Méthode n°2 : Modification manuelle de go.mod

\n

Parfois, 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.

\n

Étape 2 : Trouvez la ligne avec la dépendance souhaitée et remplacez la version par latest ou par un hash spécifique.

\n
require (\n    github.com/someuser/somelib latest\n)
\n

Étape 3 : Enregistrez le fichier et exécutez dans le terminal :

\n
go mod tidy
\n

La commande go mod tidy téléchargera les dépendances manquantes, supprimera les superflues et remplacera le mot latest par une vraie pseudo-version.

\n

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.<

Blogs

Book Recommendations