Pourquoi l'importation de paquets locaux en Go soulève-t-elle autant de questions ?
\n\nSi vous avez déjà essayé d'organiser du code Go dans des fichiers et dossiers séparés, vous avez probablement rencontré une erreur comme could not import "myproject/utils". C'est l'un des problèmes les plus courants chez les développeurs Go débutants. Sur Stack Overflow, la question "How to import local packages in go?" a recueilli des milliers de vues — et ce n'est pas sans raison.
Contrairement à Python, où il suffit de placer un fichier à côté et d'écrire import mymodule, Go exige une structure claire et une configuration correcte des modules. Mais une fois que vous maîtrisez ce mécanisme, vous comprendrez à quel point il est élégant. Éclaircissons cela une fois pour toutes.
Brève théorie : comment Go comprend les paquets
\n\nAvant d'écrire du code, retenez trois principes clés :
\n\n- \n
- Go est un langage avec une structure modulaire stricte. Chaque répertoire est un paquet (package). \n
- Le nom du paquet n'est pas obligé de correspondre au nom du dossier, mais il est fortement recommandé de le faire pour la lisibilité. \n
- L'importation de paquets locaux depuis 2019 se fait via les modules (Go modules). Oubliez
GOPATH— utilisezgo mod. \n
Passons maintenant à la pratique.
\n\nÉtape 1 : Créer un projet avec un module
\n\nOuvrez un terminal et créez un nouveau dossier pour votre projet :
\n\nmkdir go-local-imports\ncd go-local-imports\n\n\nInitialisez maintenant le module. Le nom du module peut être quelconque, mais il est logique d'utiliser un chemin unique (par exemple, un lien vers un dépôt) :
\n\ngo mod init github.com/votre-nom-utilisateur/go-local-imports\n\n\nAprès cette commande, un fichier go.mod apparaîtra dans le dossier. C'est lui qui gérera les dépendances — à la fois locales et externes.
Étape 2 : Créer un paquet local
\n\nCréons un dossier utils dans le projet. À l'intérieur, un fichier math.go :
mkdir utils\ncd utils\ntouch math.go\n\n\nOuvrez utils/math.go et écrivez :
package utils\n\n// Add retourne la somme de deux entiers\nfunc Add(a, b int) int {\n return a + b\n}\n\n\nNotez : la fonction Add est écrite avec une majuscule. En Go, cela signifie qu'elle est exportée (publique). Si vous écrivez add, elle sera privée et inaccessible depuis d'autres paquets.
Étape 3 : Importer et utiliser le paquet local
\n\nRevenez à la racine du projet et créez main.go :
cd ..\ntouch main.go\n\n\nContenu de main.go :
package main\n\nimport (\n "fmt"\n "github.com/votre-nom-utilisateur/go-local-imports/utils"\n)\n\nfunc main() {\n result := utils.Add(3, 5)\n fmt.Println("Somme :", result)\n}\n\n\nExécutez maintenant le programme :
\n\ngo run main.go\n\n\nVous devriez voir :
\n\nSomme : 8\n\n\nTout fonctionne ! Mais si vous avez obtenu une erreur, lisez la section suivante.
\n\nErreurs typiques et leurs solutions
\n\nErreur 1 : "package is not in GOROOT"
\n\nVous voyez quelque chose comme :
\npackage myproject/utils is not in GOROOT (/usr/local/go/src/myproject/utils)\n\nCause : Vous essayez d'importer un paquet sans module. Go le cherche dans la bibliothèque standard, pas dans votre projet.
\nSolution : Assurez-vous qu'il y a un fichier go.mod à la racine du projet. Sinon, exécutez go mod init nom-du-module.
Erreur 2 : "undefined: utils.Add"
\n\nCause : La fonction est écrite en minuscule (privée), ou vous avez importé le paquet mais n'utilisez pas son nom.
\nSolution : Vérifiez que toutes les fonctions nécessaires sont exportées (avec une majuscule) et que vous y accédez avec