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.go
et la construction devrait fonctionner parfaitement.
autres mesures recommandées:
- ajouter
$GOPATH/bin
à votre$PATH
par:PATH="$GOPATH/bin:$PATH"
- déplacer
main.go
dans un sous-dossier de$GOPATH/src
, p.ex.$GOPATH/src/test
-
go install test
devrait maintenant créer un exécutable dans$GOPATH/bin
qui peut être appelé en tapanttest
dans 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
PackageName
constituent 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 commandego
recherchesrc/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
GOPATH
liste 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:\Go
sous 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/