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
77
demandé sur 11684 2012-11-04 02:15:59

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.

  1. définir $GOPATH à un répertoire valide, p.ex. export GOPATH="$HOME/go"
  2. Déplacer foobar.go à $GOPATH/src/foobar/foobar.go et la construction devrait fonctionner parfaitement.

autres mesures recommandées:

  1. ajouter $GOPATH/bin à votre $PATH par: PATH="$GOPATH/bin:$PATH"
  2. déplacer main.go dans un sous-dossier de $GOPATH/src , p.ex. $GOPATH/src/test
  3. go install test devrait maintenant créer un exécutable dans $GOPATH/bin qui peut être appelé en tapant test dans votre terminal.
105
répondu fasmat 2015-08-19 03:32:22

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 commande go recherche src/pkg/widget à L'intérieur de la racine Go, et puis-si le paquet source n'est pas trouvé là-il cherche src/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 (ou c:\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'environnement GOROOT à ce répertoire lorsque vous utilisez les outils Go.

7
répondu VonC 2017-05-23 11:47:00

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.

2
répondu Moshisho 2018-01-31 07:43:04

Avez-vous essayé d'ajouter le répertoire absolu de go à votre "chemin"?

export PATH=$PATH:/directory/to/go/
-2
répondu RobEdouard 2012-11-04 08:53:57