web-dev-qa-db-fra.com

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

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

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

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

132
Mona Jalal

[Mise à jour: à partir de Go 1.8, la variable GOPATH est définie par défaut sur $HOME/go, mais cela peut toujours être utile si vous souhaitez comprendre la disposition GOPATH, 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 à ~/.bashrc ou son équivalent afin qu'il soit défini pour vous à l'avenir. Go installera les packages dans les sous-répertoires src/, bin/ et pkg/. Vous voudrez mettre vos propres paquets 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/bin dans votre .bashrc afin que vous puissiez exécuter des programmes compilés sous $GOPATH

En option, via Rob Pike , vous pouvez également définir CDPATH pour que cd soit plus rapide dans les répertoires de paquets dans bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/x signifie que vous pouvez simplement taper cd net/html au lieu de cd $GOPATH/src/golang.org/x/net/html

Keith Rarick notes vous pouvez configurer GOPATH=$HOME pour placer les répertoires Go de src/, pkg/ et bin/ directement sous votre répertoire de départ. Ce peut être Nice (par exemple, vous pourriez déjà avoir $HOME/bin dans votre chemin) mais bien sûr, certaines personnes utilisent plusieurs espaces de travail, etc.

129
twotwotwo

Celui-ci a fonctionné

Configuration de l'environnement de développement Go sur Ubuntu et comment réparer $ GOPATH/$ GOROOT

Pas

mkdir ~/go

Définir $ GOPATH dans .bashrc,

export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin
78
suryakrupa

Utilisation de la bière

Je l'ai installé avec brew.

$ brew install go

Lorsque cela sera fait, si vous exécutez cette commande d'infusion, les informations suivantes seront affichées:

$ 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 il y a ces lignes:

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

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

Mise en place de l'environnement de GO

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

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

Vous pouvez ensuite vérifier avec GO pour vérifier 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"

Mise en place 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 saisir json2csv dans mon shell? En effet, le répertoire /bin sous $GOPATH ne figure pas sur votre $PATH.

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

Alors ajoutons-le temporairement:

$ export PATH=$GOPATH/bin:$PATH

Et revérifier:

$ 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 à $PATH et $GOPATH à votre $HOME/.bash_profile pour les rendre persistantes entre les redémarrages.

30
slm

Regarder une vidéo

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

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

_ {Il est plus facile de montrer que de se faire dire.} _

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

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

17
0x434D53

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

export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH
4
João Fernandes

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 echo $ GOPATH vous devriez voir la valeur correcte. 

3
Shasti

(pour Mac)

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

Je devais «forcer» GOPATH en définissant la variable d'environnement pour chaque commande qui l'exigeait. Par exemple:

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

Même glide me donnait l'erreur GOPATH not set. Résolu, encore une fois, par "gavage forcé": J'ai essayé toutes ces réponses et, pour une raison encore inconnue, aucune d'entre elles n'a fonctionné.

Je devais «forcer» 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 ça aide quelqu'un.

2
zephel

Votre $GOROOT ne doit pas être configuré. Votre $GOPATH devrait être défini sur $HOME/go en tapant export $GOPATH=$HOME/go

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

2
julien bouteloup

Il suffit de faire export GOPATH="/whatever/you/like/your/GOPATH/to/be".

1
Volker

Lancez 'go env' et voyez où votre GOPATH pointe actuellement. Si vous changez de répertoire, votre commande 'go get..etc' devrait fonctionner.

0
Alexander Leon

Vous pouvez utiliser la solution "exportation" exactement comme ce que d’autres types ont suggéré. Je voudrais vous proposer une autre solution pour plus de commodité: vous pouvez utiliser n’importe quel chemin en tant que GOPATH lors de l’exécution de commandes Go.

Premièrement, 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/bin pour une utilisation pratique:

$ Sudo mv gost /usr/local/bin

Exécutez la commande ci-dessous pour ajouter le chemin que vous souhaitez utiliser en tant que GOPATH dans le fichier pathspacegost. 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 que vous voulez au format: 

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

Par exemple, vous voulez exécuter go get github.com/go-sql-driver/mysql avec /home/foobar/bar en tant que GOPATH, procédez comme suit:

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

Cela vous aiderait à configurer GOPATH et à exécuter la commande. Mais rappelez-vous que vous avez ajouté le chemin dans gost's pathspace. Si vous êtes sous n'importe quel niveau de sous-répertoires de /home/foobar/bar, vous pouvez même exécuter la commande ci-dessous qui ferait la même chose en un mot:

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

gost est 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 son utilisation pour exécuter d'autres commandes Go, vous pouvez simplement exécuter gost help goCmdName. Par exemple, vous voulez en savoir plus sur 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

0
Franco

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 logiciel GOPATH. Puis la commande "go get" a été exécutée sans Sudo et cela a parfaitement fonctionné.

0
mtamboli

Si vous rencontrez ce problème après avoir configuré $GOPATH, il se peut que vous l'exécutiez avec un shell non pris en charge. J'utilisais fish et cela n'a pas fonctionné, le lancer avec bash a bien fonctionné.

0
Julien Fouilhé