Module en Go !
Définir un module en Go ?
Qu'est-ce qu'un package ?
Avant de définir un module, il faut d’abord comprendre ce qu’est un package.
En Go, un package est un regroupement de fichiers source situés dans le même répertoire et partageant le même nom de package. Chaque fichier débute par une déclaration du type :
package nom_du_package
Le package main
est un cas particulier de package en Go car ils est utilisé pour définir un programme exécutable. Lorsque vous écrivez une application que vous souhaitez lancer directement (plutôt qu’un package à importer), votre code doit appartenir au package main
. La fonction func main() {}
qui suit est le point d’entrée à l’exécution de votre programme.
Qu'est-ce qu'un module ?
Un module en Go est un ensemble de packages regroupés dans un même projet. Il est défini par un fichier go.mod
qui précise :
-
Le nom du module : Il identifie votre projet.
-
La version minimale de Go requise : Par exemple, go 1.23.
-
Les dépendances externes : Ces dépendances et leurs versions seront ajoutées ultérieurement.

Les modules permettent de gérer efficacement les dépendances et les versions, rendant votre code plus organisé, maintenable et reproductible. 🚀
Si un module est destiné à être réutilisé dans un autre projet Go, il peut être considéré comme une bibliothèque.
Initialiser : module
Pour transformer votre projet en module — ce qui vous permettra de regrouper, les packages grâce au fichier go.mod
qui sera créé — placez-vous dans le dossier de votre projet et exécutez :
go mod init mon-projet

Cette commande crée un fichier go.mod contenant :
-
Le nom du module, par exemple : module mon-projet.
-
La version minimale de Go requise.
module mon-projet
go 1.23.5
Deux types de package dans un module Go
Il existe deux type de package :
- Packages intégrés à Go
- Packages tiers (dépendances externes)

Packages intégrés à Go
La manière la plus simple d’ajouter une dépendance consiste à importer un package externe directement dans votre code. Par exemple :
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Salut !")
fmt.Println("Heure actuelle :", time.Now())
}
Dans cet exemple, fmt
et time
sont importés.
Ici, fmt
et time
font partie de la bibliothèque standard et sont toujours disponibles.

Packages tiers (dépendances externes)
Si vous importiez un package externe (par exemple, un package provenant de GitHub), Go détecterait son absence et l’ajouterait au fichier go.mod
lors de la compilation ou après avoir exécuté :
go mod tidy
Exemple d'ajout d'une dépendance externe : gin-gonic/gin
Nous allons utiliser le package tiers : gin-gonic/gin
. C'est un framework web qui permet de créer un serveur web performant.
Si vous ne comprenez pas encore tout le code, ce n’est pas grave. Concentrez-vous simplement sur la façon dont on utilise import pour inclure des packages externes.
Recopier ce code dans le fichier main.go
:
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Hello, Gin!"})
})
r.Run(":8888")
}
Dans la ligne 6, nous avons ajouté github.com/gin-gonic/gin
.
Pour l'utiliser correctement, il nous faut tapez la commande suivante dans un terminal :
go mod tidy
Cela va modifier le fichier go.mod
:
module mon-projet
go 1.23.5
require github.com/gin-gonic/gin v1.10.0
require (
github.com/bytedance/sonic v1.11.6 // indirect
github.com/bytedance/sonic/loader v0.1.1 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
// etc...
)

🤔 Pourquoi y-a-t-il d'autres require
?
Ces multiples require
apparaissent parce que la dépendance github.com/gin-gonic/gin
elle-même utilise d’autres packages pour fonctionner correctement.
Cela crée (car il n’existait pas avant) également un autre fichier appelé go.sum.
📌 À quoi sert go.sum ?
Ce fichier contient les checksums (empreintes de sécurité) des dépendances utilisées dans votre projet. Il garantit que vous utilisez exactement la même version des packages téléchargés, évitant ainsi les conflits de version.
🚀 Et maintenant ?
Si nous lançons notre programme, il fonctionnera car les dépendances sont bien gérées par Go Modules. Mais nous ne le ferons pas encore, car nous n’avons pas encore vu comment créer un serveur web en Go. Ne vous inquiétez pas, nous verrons cette partie bientôt ! 😊
Ajouter une dépendance explicitement avec go get
Vous pouvez également ajouter ou mettre à jour une dépendance en utilisant la commande go get
.
Par exemple :
go get github.com/gin-gonic/gin@v1.10.0
Cette commande, télécharge la version spécifique du package. Ensuite, elle met à jour le fichier go.mod
pour inclure la dépendance avec la version choisie. Enfin, elle met à jour le fichier go.sum qui garantit l'intégrité des modules téléchargés.
Une autre manière d'ajouter des dépendances
Il est possible d'utiliser import
de cet manière aussi :
import "fmt"
import "time"
Environnements sans accès direct à internet
Si vous travaillez dans un environnement isolé, vous pouvez préparer votre projet avec toutes les dépendances nécessaires en créant un dossier vendor
:
go mod vendor
Ce dossier contiendra toutes les dépendances, permettant ainsi à votre projet de compiler sans connexion internet.