impossible de télécharger, $ GOPATH non défini

150

Je veux installer json2csv en utilisant go get github.com/jehiah/json2csvmais je reçois cette erreur:

package github.com/jehiah/json2csv: cannot download, $GOPATH not set. For more details see: go help go path

Une aide sur la façon de résoudre ce problème sur MacOS?

Mona Jalal
la source
3
J'ai le même problème avec un package différent (chiot). Allez les mainteneurs, veuillez créer un programme d'installation (OS X) qui termine le travail! Le programme d'installation OS X pour Node est un excellent exemple. L'utilisation de Node ne nécessite pas d'étapes d'installation manuelle supplémentaires. Cela fonctionne juste. J'espère que les futures versions du programme d'installation de Go seront meilleures.
jwfearn

Réponses:

140

[Mise à jour: à partir de Go 1.8, la valeur par GOPATHdéfaut est $HOME/go, mais vous pouvez toujours trouver cela utile si vous voulez comprendre la GOPATHmise en page, la personnaliser, etc.]

Le site officiel de Go traite de GOPATH et de la mise en page d'un répertoire d'espace de travail .

export GOPATH="$HOME/your-workspace-dir/"- exécutez-le dans votre shell, puis ajoutez-le ~/.bashrcou un équivalent afin qu'il soit défini pour vous dans le futur. Go installera les paquets sous src/, bin/et pkg/, là - bas sous - répertoires. Vous voudrez mettre vos propres packages quelque part sous $GOPATH/src, comme $GOPATH/src/github.com/myusername/si vous souhaitez publier sur GitHub. Vous voudrez probablement aussi export PATH=$PATH:$GOPATH/bindans votre .bashrcafin que vous puissiez exécuter des programmes compilés sous $GOPATH.

En option, via Rob Pike , vous pouvez également définir CDPATHpour qu'il soit plus rapide cdde regrouper les répertoires dans bash: cela export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xsignifie que vous pouvez simplement taper cd net/htmlau lieu de cd $GOPATH/src/golang.org/x/net/html.

Keith Rarick note que vous pouvez définir GOPATH=$HOMEpour mettre Go src/, pkg/et bin/répertoires sous votre répertoire personnel . Cela peut être bien (par exemple, vous pouvez déjà en avoir $HOME/bindans votre chemin), mais bien sûr, certaines personnes utilisent plusieurs espaces de travail, etc.

twotwotwo
la source
Merci pour l'info. Avez-vous besoin de modifier votre espace de travail pour chaque projet individuel?
Doug Molineux
1
En général, non, vous pouvez utiliser un espace de travail dont src/contient par exemple github.com/youruser/xet github.com/youruser/y. C'est ce que je fais. Les gens peuvent avoir leurs raisons de faire autrement (politique de l'entreprise de séparer les projets?), Mais je ne peux pas en parler.
twotwotwo
3
$ GOPATH est défini, mais "ne peut pas télécharger, $ GOPATH n'est pas défini. Pour plus de détails, voir: go help gopath" apparaît quand même.
Tyguy7
Quelle plateforme (Windows ou Linux / OS X / autre Unix)? Si ce n'est pas Windows, que echo $GOPATHdit-on? Cela pourrait valoir la peine d'être publié sous forme de question distincte; on dirait que vous êtes dans une situation inhabituelle, et les déboguer dans les commentaires peut être délicat.
twotwotwo
2
@ Tyguy7 les chances sont que vous ne l'avez pas export; exécuter /bin/bash -c "echo \$GOPATH"pour vérifier que les sous-processus peuvent voir $GOPATH; s'il fait écho à vide, alors exécutez export GOPATHet puisgo get ...
sanmai
33

Utilisation d'infusion

Je l'ai installé en utilisant brew.

$ brew install go

Quand cela a été fait, si vous exécutez cette commande de brassage, les informations suivantes s'affichent:

$ brew info go
go: stable 1.4.2 (bottled), HEAD
Go programming environment
https://golang.org
/usr/local/Cellar/go/1.4.2 (4676 files, 158M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/go.rb
==> Options
--with-cc-all
    Build with cross-compilers and runtime support for all supported platforms
--with-cc-common
    Build with cross-compilers and runtime support for darwin, linux and windows
--without-cgo
    Build without cgo
--without-godoc
    godoc will not be installed for you
--without-vet
    vet will not be installed for you
--HEAD
    Install HEAD version
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin

Les pièces importantes sont ces lignes:

/usr/local/Cellar/go/1.4.2 (4676 fichiers, 158 Mo) *

export PATH = $ PATH: / usr / local / opt / go / libexec / bin

Configuration de l'environnement de GO

Cela montre où GO a été installé. Nous devons procéder comme suit pour configurer l'environnement de GO:

$ export PATH=$PATH:/usr/local/opt/go/libexec/bin
$ export GOPATH=/usr/local/opt/go/bin

Vous pouvez ensuite vérifier à l'aide de GO pour voir s'il est correctement configuré:

$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/usr/local/opt/go/bin"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.4.2/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

Configuration de json2csv

Ça a l'air bien, alors installons json2csv:

$ go get github.com/jehiah/json2csv
$

Qu'est-ce qui vient juste de se passer? Il l'a installé. Vous pouvez vérifier comme ceci:

$ $ ls -l $GOPATH/bin
total 5248
-rwxr-xr-x  1 sammingolelli  staff  2686320 Jun  9 12:28 json2csv

OK, alors pourquoi ne puis-je pas taper json2csvdans mon shell? C'est parce que le /binrépertoire ci-dessous $GOPATHn'est pas sur votre $PATH.

$ type -f json2csv
-bash: type: json2csv: not found

Alors ajoutons-le temporairement:

$ export PATH=$GOPATH/bin:$PATH

Et revérifiez:

$ type -f json2csv
json2csv is hashed (/usr/local/opt/go/bin/bin/json2csv)

Maintenant c'est là:

$ json2csv --help
Usage of json2csv:
  -d=",": delimiter used for output values
  -i="": /path/to/input.json (optional; default is stdin)
  -k=[]: fields to output
  -o="": /path/to/output.json (optional; default is stdout)
  -p=false: prints header to output
  -v=false: verbose output (to stderr)
  -version=false: print version string

Ajoutez les modifications que nous avons apportées à $PATHet $GOPATHà votre $HOME/.bash_profilepour les faire persister entre les redémarrages.

slm
la source
18

Regarder une vidéo

En général, je recommande toujours cette vidéo officielle de Go pour avoir un aperçu rapide du sujet:

http://www.youtube.com/watch?v=XCsL89YtqCs

C'est plus facile d'être montré que d'être dit.

@jwfearn a paraphrasé la partie importante de la vidéo:

export GOPATH="${HOME}/gocode"; export PATH="${PATH}:${GOPATH}/bin"; mkdir -p "${GOPATH}"

0x434D53
la source
2
Excellente vidéo d'introduction - je comprends toujours mieux quand on me la montre.
Joshua Pinter
3
Merci @jwfearn - les vidéos sont pour la musique et autres divertissements; impossible de copier et coller d'eux :-)
kguest
5

J'ai trouvé plus facile de le faire comme ceci:

export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH
João Fernandes
la source
3

Pour MAC, cela a bien fonctionné pour moi.

sudo nano /etc/bashrc

et ajoutez le ci-dessous à la fin du fichier

export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=/usr/local/opt/go/bin

Cela devrait résoudre le problème. Essayez d'ouvrir un nouveau terminal et faites écho à $ GOPATH, vous devriez voir la valeur correcte.

Shasti
la source
2

(pour Mac)

J'ai essayé toutes ces réponses et, pour une raison encore inconnue, aucune d'elles n'a fonctionné.

J'ai dû "forcer" le GOPATH en définissant la variable d'environnement pour chaque commande qui l'exigeait. Par exemple:

sudo env GOPATH=$HOME/goWorkDirectory go build ...

M'a même glidedonné l' GOPATH not seterreur. Je l'ai résolu, encore une fois, par le "gavage": j'ai essayé toutes ces réponses et, pour une raison encore inconnue, aucune d'elles n'a fonctionné.

J'ai dû "forcer" le GOPATH en définissant la variable d'environnement pour chaque commande qui l'exigeait.

sudo env GOPATH=$HOME/goWorkDirectory glide install

J'espère que cela aide quelqu'un.

zéphel
la source
2

Votre $GOROOTne doit pas être configuré. Vous $GOPATHdevriez être défini sur $HOME/goen tapantexport $GOPATH=$HOME/go

Veuillez taper export GOROOT=""pour résoudre votre problème.

Julien Bouteloup
la source
1

Fais juste export GOPATH="/whatever/you/like/your/GOPATH/to/be".

Volker
la source
4
Si je suis un go noob, je ne sais pas encore "où je voudrais que mon GOPATH soit". IMHO c'est un glissement qu'il n'y a pas de comportement GOPATH par défaut qui peut être remplacé par une variable d'environnement.
jwfearn le
0

Si vous rencontrez ce problème après avoir $GOPATHconfiguré, c'est peut-être parce que vous l'exécutez avec un shell non pris en charge. J'utilisais fishet cela ne fonctionnait pas, le lancer avec bashfonctionnait bien.

Julien Fouilhé
la source
0

Vous pouvez utiliser la solution «export» comme ce que d'autres gars ont suggéré. J'aimerais vous fournir une autre solution pour une commodité permanente: vous pouvez utiliser n'importe quel chemin comme GOPATH lors de l'exécution des commandes Go.

Tout d'abord, vous devez télécharger un petit outil nommé gost: https://github.com/byte16/gost/releases . Si vous utilisez ubuntu, vous pouvez télécharger la version linux ( https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz ).

Ensuite, vous devez exécuter les commandes ci-dessous pour le décompresser:

$ cd /path/to/your/download/directory 
$ tar -xvf gost_linux_amd64.tar.gz

Vous obtiendrez un exécutable gost. Vous pouvez le déplacer vers /usr/local/binpour une utilisation pratique:

$ sudo mv gost /usr/local/bin

Exécutez la commande ci-dessous pour ajouter le chemin que vous souhaitez utiliser comme GOPATH dans l' espace de chemin gost maintenu. Il est nécessaire de donner au chemin un nom que vous utiliserez plus tard.

$ gost add foo /home/foobar/bar     # 'foo' is the name and '/home/foobar/bar' is the path

Exécutez n'importe quelle commande Go de votre choix au format:

gost goCommand [-p {pathName}] -- [goFlags...] [goArgs...]

Par exemple, vous voulez exécuter go get github.com/go-sql-driver/mysqlavec /home/foobar/barle GOPATH, faites-le simplement comme ci-dessous:

$ gost get -p foo -- github.com/go-sql-driver/mysql  # 'foo' is the name you give to the path above.

Cela vous aiderait à définir le GOPATH et à exécuter la commande. Mais rappelez-vous que vous avez ajouté le chemin dans gostl' espace de chemin de . Si vous êtes sous n'importe quel niveau de sous-répertoires de /home/foobar/bar, vous pouvez même simplement exécuter la commande ci-dessous qui ferait la même chose pour faire court:

$ gost get -- github.com/go-sql-driver/mysql

gostest un outil simple de Go qui peut vous aider à gérer les GOPATH et à exécuter les commandes Go. Pour plus de détails sur la façon de l'utiliser pour exécuter d'autres commandes Go, vous pouvez simplement l'exécuter gost help goCmdName. Par exemple, vous voulez en savoir plus install, tapez simplement les mots ci-dessous dans:

$ gost help install

Vous pouvez également trouver plus de détails dans le README du projet: https://github.com/byte16/gost/blob/master/README.md

Franco
la source
0

Exécutez «go env» et voyez où votre GOPATH pointe actuellement. Si vous passez dans ce répertoire, votre commande «go get..etc» devrait fonctionner.

Alexandre Léon
la source
0

Ce problème m'est arrivé dans Raspberry Pi. Je m'étais connecté via le client VNC Le problème persistait malgré la configuration et l'exportation du GOPATH. Ensuite, exécutez la commande "go get" sans sudo et cela a parfaitement fonctionné.

mtamboli
la source
-1

J'ai dû exécuter une application en tant que root (pour ouvrir un serveur Web sur le port 80), cela a produit l'erreur pour moi, car l'utilisateur sudo a un environnement différent de l'utilisateur normal, par conséquent GOPATH n'a pas été défini.

Si quelqu'un d'autre rencontre ce problème, ajoutez -Eà la commande, cela préservera l'environnement utilisateur.

sudo -E go run main.go

Pour plus d'informations, voir la discussion ici: Google Groupes - Problème GOPATH

Pwdr
la source
Je ne sais pas pourquoi cela a été refusé, mais je l'ai corrigé pour moi ...
Pwdr