Go: Comprenez ce que sont les fichiers go.mod et go.sum

11 mai 2026

Go: Comprenez ce que sont les fichiers go.mod et go.sum

Si vous avez déjà travaillé ou connaissez un peu d’autres langages, on peut comparer le fichier go.mod de Go au package.json du JavaScript, au composer.json du PHP ou au requirements.txt du Python.

Autrement dit, le fichier go.mod n’est autre que le fichier par lequel Go gère la liste des paquets dont votre application a besoin pour fonctionner.

En dehors des dépendances, c’est dans ce fichier que Go consigne le nom de votre package et la version de Go qui était utilisée au moment de la création du projet.

Cette seconde information est extrêmement précieuse, car sur cette base, Go saura quelles versions des dépendances externes il peut ou ne peut pas utiliser.

Pour démarrer un nouveau go.mod, vous devez exécuter la commande suivante :

$ go mod init [NOME-DO-SEU-PACKAGE]

Maintenant, imaginez que, à la place de [NOME-DO-SEU-PACKAGE] on mette github.com/aprendagolang/exemplo et que la version de Go installée sur la machine soit la 1.16. Après l’exécution de la commande, un fichier ressemblant à ceci sera généré :

Avec notre go.mod initialisé, nous allons écrire une petite API en utilisant le framework GoFiber.

package main

import (
    "fmt"

    "github.com/gofiber/fiber/v2"
)

func main() {
    app := fiber.New()

    app.Get("/:name", HelloHandler)

    app.Listen(":3000")
}

func HelloHandler(c *fiber.Ctx) error {
    return c.JSON(fiber.Map{
        "message": fmt.Sprintf("Hello, %s!", c.Params("name")),
    })
}

 

Si vous regardez le fichier go.mod, vous verrez que rien n’a changé. C’est parce que nous n’avons pas encore demandé à Go de vérifier les dépendances de notre projet.

Pour ce faire, il faut exécuter la commande go mod tidy. À l’issue de l’exécution, une nouvelle entrée doit avoir été ajoutée au fichier go.mod, le rendant similaire à ceci.

Outre ce changement dans go.mod, un nouveau fichier a été généré, go.sum. Ce fichier a pour rôle de conserver toutes les informations relatives au checksum des dépendances utilisées dans le projet.

Un projet simple comme celui-ci, sur ma machine, a généré le fichier go.sum suivant.

Cela s’explique par le fait qu’il ne conserve pas uniquement le checksum des paquets que nous installons directement, mais aussi ceux installés indirectement, par exemple github.com/valyala/fasthttp qui est une dépendance de github.com/gofiber/fiber/v2.

Tous ces paquets que Go a référencés dans le go.sum ont été ajoutés dans votre répertoire $GOPATH/pkg/mod. Avec ce cache en main, Go n’a plus besoin de télécharger les dépendances à chaque fois que vous exécutez le projet.

Notez que ce cache est global, c’est-à-dire qu’il sera partagé par tous les projets que vous possédez ou que vous créerez sur votre machine.

Si vous souhaitez conserver vos dépendances directement dans votre projet, vous pouvez exécuter la commande go mod vendor, qui dans ce cas devrait générer un nouveau dossier nommé vendor, ressemblant à ceci.

Personnellement, je n’aime pas trop faire cela, mais dans certains cas très spécifiques, cela peut avoir du sens.

Pour conclure, dans certains fichiers go.mod, vous pouvez trouver une section appelée « replace ».

Cette section sert à indiquer à Go que le paquet github.com/aprendagolang/meu-mod à utiliser dans ce projet se trouve dans le répertoire ../meu-mod et non dans $GOPATH/pkg/mod.

Cette section est très utilisée dans les projets qui utilisent plusieurs packages maintenus par la même équipe ou entreprise.

Cependant, à partir de la version 1.18 de Go, cette section peut être remplacée par le workspace Go. Si vous souhaitez en savoir plus, je vous laisse le lien vers l’article et la vidéo où j’explique comment utiliser cette nouvelle fonctionnalité de Go.

Laissez vos questions dans les commentaires.

À la prochaine !

 

 

Fabien Delpont

Auteur

Fabien Delpont

Fabien Delpont, développeur et créateur du site Python Doctor.