190 votes

Allez construire : "Impossible de trouver le package" (même si GOPATH est défini)

Même si j'ai GOPATH correctement configuré, je n'arrive toujours pas à trouver mes propres packages avec "go build" ou "go run". Qu'est-ce que je fais de mal?

$ echo $GOROOT
/usr/local/go

$ echo $GOPATH
/home/mitchell/go

$ cat ~/main.go
package main
import "foobar"
func main() { }

$ cat /home/mitchell/go/src/foobar.go
package foobar

$ go build main.go
main.go:3:8: import "foobar": impossible de trouver le package

2 votes

Je rencontre le même problème lorsque je vais chercher github.com/adonovan/gopl.io/tree/master/ch1/helloworld La raison en est qu'il n'y a pas de fichier nommé helloworld.go. go get fonctionne en faisant correspondre le nom du package et le nom du fichier.

0 votes

Il se peut également que vous ayez besoin de mettre à jour Go. J'ai rencontré un problème similaire où j'avais du code existant utilisant go.mod pour définir un module. Sur une machine de test, j'avais téléchargé le code et j'essayais de le compiler mais Go me donnait toutes sortes d'erreurs liées à GOPATH et l'incapacité de trouver des modules. C'était la version Go 1.7. Dès que j'ai mis à jour Go, tout a fonctionné sans problème.

0 votes

Tapez ceci dans le terminal pour une explication à jour $ go help gopath

3voto

Moshisho Points 1604

TL;DR: Suivez les conventions Go! (leçon apprise à la dure), vérifiez les anciennes versions de Go et supprimez les. Installez la dernière.

Pour moi, la solution était différente. J'ai travaillé sur un serveur Linux partagé et après avoir vérifié plusieurs fois mon GOPATH et d'autres variables d'environnement, cela ne fonctionnait toujours pas. J'ai rencontré plusieurs erreurs dont 'Cannot find package' et 'unrecognized import path'. Après avoir essayé de réinstaller avec cette solution en suivant les instructions sur golang.org (y compris la partie désinstaller) j'ai encore rencontré des problèmes.

Il m'a fallu un certain temps pour réaliser qu'il y avait toujours une ancienne version qui n'avait pas été désinstallée (en exécutant go version puis which go de nouveau... DAHH) ce qui m'a amené à cette question et j'ai finalement résolu le problème.

3voto

Dimi Ansari Points 15

Exécuter go env -w GO111MODULE=auto a fonctionné pour moi

2voto

CAoT Points 61

Sans modifier GOPATH ou quoi que ce soit, dans mon cas, cela a simplement fonctionné comme suit :


/app
 main.go
 /utils
     utils.go

Importer des packages selon les besoins. Cela peut être déroutant, car cela n'est pas relatif au chemin de l'app. Vous devez également ajouter l'app dans le chemin du package :

main.go:

package main

import(
   "app/util"  
)

Étant dans le répertoire de l'application, exécutez :

go mod init app

go get

go build main.go / go run main.go

Vous devriez être prêt à partir.


GOPATH = /home/go

appPath = /home/projects/app

Créez un go.mod et un go.sum corrects avec go mod init app (supprimez les anciens avant)

Après avoir résolu toutes les dépendances comme les packages manquants avec go get github.com/example/package.

2voto

Nik Points 1

En termes simples, vous pouvez résoudre le problème d'importation même avec GO111MODULE=on avec la syntaxe suivante pour l'importation :

import /

votre_nom_de_module -> nom du module qui peut être trouvé dans le fichier go.mod du module en tant que première ligne.

exemple : github.com/nikhilg-hub/todo/ToDoBackend

nom_du_package -> Chemin vers votre package à l'intérieur du module.

exemple : orm

Ainsi, l'instruction d'importation ressemblerait à ceci :

import "github.com/nikhilg-hub/todo/ToDoBackend/orm"

À mon avis, nous devons spécifier le nom du module + le nom du package car nous pourrions avoir besoin du même nom de package dans deux modules ou plus.

Remarque : Si vous importez un package du même module, vous devez toujours spécifier le chemin d'importation complet comme ci-dessus.

1voto

Andy Points 592

Si vous avez un $GOROOT valide et un $GOPATH mais que vous développez en dehors d'eux, vous pourriez obtenir cette erreur si le package (le vôtre ou celui de quelqu'un d'autre) n'a pas été téléchargé.

Si c'est le cas, essayez go get -d (le drapeau -d empêche l'installation) pour vous assurer que le package est téléchargé avant de l'exécuter, de le construire ou de l'installer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X