Aller build: "impossible de trouver le paquet" (même si GOPATH est défini)
même si J'ai GOPATH correctement défini, Je ne peux toujours pas obtenir" go build "ou" go run " pour trouver mes propres paquets. Ce que je fais mal? Merci beaucoup!
$ 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": cannot find package
4 réponses
cela ne fonctionne pas parce que votre fichier source foobar.go n'est pas dans un répertoire appelé foobar . go build et go install essayent de faire correspondre les répertoires, pas les fichiers source.
- définir
$GOPATHà un répertoire valide, p.ex.export GOPATH="$HOME/go" - Déplacer
foobar.goà$GOPATH/src/foobar/foobar.goet la construction devrait fonctionner parfaitement.
autres mesures recommandées:
- ajouter
$GOPATH/binà votre$PATHpar:PATH="$GOPATH/bin:$PATH" - déplacer
main.godans un sous-dossier de$GOPATH/src, p.ex.$GOPATH/src/test -
go install testdevrait maintenant créer un exécutable dans$GOPATH/binqui peut être appelé en tapanttestdans votre terminal.
Edit: puisque vous vouliez dire GOPATH, voir fasmat 's answer (upvoted)
comme mentionné dans " Comment faire pour trouver mon paquet? ", vous devez mettre le paquet xxx dans un répertoire xxx .
voir le Go language spec :
package math
un ensemble de fichiers partageant le même
PackageNameconstituent la mise en œuvre d'un paquet.
Une implémentation peut exiger que tous les fichiers source d'un paquet habitent le même répertoire.
Le Code de l'organisation mentionne:
lors de la construction d'un programme qui importe le paquet "
widget" la commandegorecherchesrc/pkg/widgetà L'intérieur de la racine Go, et puis-si le paquet source n'est pas trouvé là-il cherchesrc/widgetà l'intérieur de chaque espace de travail dans l'ordre.
(un "espace de travail" est une entrée de chemin dans votre GOPATH : cette variable peut faire référence à plusieurs chemins pour votre src, bin, pkg à être)
(réponse originale)
vous devriez aussi mettre GOPATH à ~ / go, pas GOROOT , comme illustré dans " Comment Écrire Go Code ".
le chemin Go est utilisé pour résoudre les déclarations d'importation. Elle est implémentée et documentée dans le paquet go/build.
la variable d'environnement
GOPATHliste les endroits où chercher le code Go.
Sur Unix,la valeur est une chaîne séparée par deux points.
Sur Windows, la valeur est une chaîne séparée par un point-virgule.
Sur le Plan 9, la valeur est une liste.
qui est différent de GOROOT :
les distributions binaires de Go supposent qu'elles seront installées dans
/usr/local/go(ouc:\Gosous Windows), mais il est possible de les installer dans un endroit différent.
Si vous faites cela, vous devrez définir la variable d'environnementGOROOTà ce répertoire lorsque vous utilisez les outils Go.
TL; DR: Follow Go conventions! (leçon apprise à la dure), vérifiez les anciennes versions de go et supprimer eux. Installez la dernière version.
pour moi la solution était différente. J'ai travaillé sur un serveur Linux partagé et après avoir vérifié mon GOPATH et d'autres variables d'environnement plusieurs fois, il n'a toujours pas fonctionné. J'ai rencontré plusieurs erreurs, dont "impossible de trouver le paquet" et "chemin d'importation non reconnu". Après avoir essayé de réinstaller avec cette "solution 151970920" par les instructions sur golang.org (y compris la partie uninstall ) toujours des problèmes rencontrés.
m'a pris un certain temps pour réaliser qu'il y a toujours une ancienne version qui n'a pas été désinstallée (en tournant go version puis which go à nouveau... DAHH) ce qui m'a amené à cette question et finalement résolu.
Avez-vous essayé d'ajouter le répertoire absolu de go à votre "chemin"?
export PATH=$PATH:/directory/to/go/