Comment éviter l'erreur "package XXX is not in GOROOT" dans un projet en Go ?

Go est un langage récent créé par les équipes de Google. Il veut combiner la facilité d'écriture avec une efficacité maximale dans la compilation et l'exécution du code. Vous devez donc écrire votre code avec ce langage puis utiliser la commande "go build" pour compiler le code projet. Il sera compilé en un seul fichier exécutable. Le message d'erreur "package XXX is not in GOROOT" est lié à la configuration de votre projet.

Au cours de son évolution, la gestion de la configuration des projets dans le langage Go a évolué. Il est, depuis la version 1.16, conseillé d'avoir un fichier intitulé "go.mod" à la racine de votre projet. Ce fichier va contenir les informations de configuration de votre projet. Il va également indiquer lors de la compilation que ce projet est un module Go qui ne fait pas partie des modules internes du SDK du langage Go. Si vous n'avez pas ce fichier, le compilateur va chercher ce module dans le dossier stocké dans la variable "GOROOT", qui correspond au dossier d'installation du langage. C'est ce qui provoque l'affichage du message d'erreur.

Une autre cause possible est la présence de plusieurs fichiers "go.mod" dans votre projet. Il ne doit y avoir qu'un seul fichier, à la racine de votre projet. Si vous vous êtes trompé, parcourez les dossiers de votre projet et supprimez tous les fichiers "go.mod" et "go.dep" que vous trouvez. Rendez-vous ensuite à la racine du projet avec votre terminal ou invite de commande, puis utilisez la commande "go mod init" pour initialiser le projet et créer le fichier "go.mod" à la racine.

Si vous avez mis à jour votre installation du langage Go ou que vous ne souhaitez pas utiliser le fichier de configuration "go.mod" dans votre projet, vous devez modifier la variable d'environnement "GO111MODULE". Vous pouvez définir sa valeur à "off". Le compilateur va alors chercher les modules dans le dossier contenu dans la variable "GOPATH" uniquement. Nous vous conseillons de faire cette modification uniquement si vous savez ce que vous faites, car l'utilisation des modules internes du langage Go ne se fait pas de la même façon.

go env -w GO111MODULE=off

Divers