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?
[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.
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
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
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"
Ç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.
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}"
J'ai trouvé plus facile de le faire comme ça:
export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH
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.
(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.
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.
Il suffit de faire export GOPATH="/whatever/you/like/your/GOPATH/to/be"
.
Lancez 'go env' et voyez où votre GOPATH pointe actuellement. Si vous changez de répertoire, votre commande 'go get..etc' devrait fonctionner.
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
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é.
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é.