impossibile scaricare, $ GOPATH non impostato


150

Voglio installare json2csv usando go get github.com/jehiah/json2csvma ricevo questo errore:

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

Qualche aiuto su come risolvere questo problema su MacOS?




3
Sto riscontrando lo stesso problema con un pacchetto diverso (cucciolo). Dai manutentori Go, crea un programma di installazione (OS X) che termini il lavoro! Il programma di installazione di OS X per Node è un ottimo esempio. L'uso di Node non richiede ulteriori passaggi di installazione manuale. Funziona e basta. Spero che le versioni future dell'installer di Go siano migliori.
jwfearn,

Risposte:


140

[Aggiornamento: a partire da Go 1.8, il GOPATHvalore predefinito è $HOME/go, ma potresti ancora trovare utile se vuoi capire il GOPATHlayout, personalizzarlo, ecc.]

Il sito Go ufficiale discute di GOPATH e di come creare una directory dell'area di lavoro .

export GOPATH="$HOME/your-workspace-dir/"- eseguilo nella tua shell, quindi aggiungilo ~/.bashrco equivalente in modo che sarà impostato per te in futuro. Go sarà installare i pacchetti sotto src/, bin/e pkg/, sottodirectory lì. Ti consigliamo di mettere i tuoi pacchetti da qualche parte sotto $GOPATH/src, come $GOPATH/src/github.com/myusername/se volessi pubblicare su GitHub. Probabilmente vorrai anche il export PATH=$PATH:$GOPATH/bintuo in .bashrcmodo da poter eseguire i programmi compilati sotto $GOPATH.

Facoltativamente, tramite Rob Pike , puoi anche impostare in CDPATHmodo che sia più veloce cdimpacchettare le directory in bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xsignifica che puoi semplicemente digitare cd net/htmlinvece di cd $GOPATH/src/golang.org/x/net/html.

Keith Rarick note è possibile impostare GOPATH=$HOMEa mettere Go src/, pkg/e bin/le directory proprio sotto il homedir. Questo può essere utile (ad esempio, potresti già avere $HOME/binnel tuo percorso) ma ovviamente alcune persone usano più aree di lavoro, ecc.


Grazie per le informazioni. Devi cambiare il tuo spazio di lavoro per ogni singolo progetto?
Doug Molineux,

1
In generale, no, è possibile utilizzare uno spazio di lavoro di cui src/contiene ad esempio github.com/youruser/xe github.com/youruser/y. Questo è ciò che faccio. Le persone potrebbero avere i loro motivi per fare diversamente (politica aziendale per tenere separati i progetti?), Ma non posso parlarne.
Due giorni

3
$ GOPATH è impostato, ma "impossibile scaricare, $ GOPATH non impostato. Per ulteriori dettagli, vedere: go help gopath" appare comunque.
Tyguy7,

Quale piattaforma (Windows o Linux / OS X / altro Unix)? Se non Windows, cosa echo $GOPATHdice? Potrebbe valere la pena pubblicare come domanda separata; sembra che ti trovi in ​​una situazione insolita e il debug di quelli nei commenti può essere complicato.
Due

2
@ Probabilità Tyguy7 non è exportvero; eseguire /bin/bash -c "echo \$GOPATH"per verificare che i processi secondari possano vedere $GOPATH; se è vuoto, allora corri export GOPATHe poigo get ...
sanmai


33

Usando la birra

L'ho installato usando brew.

$ brew install go

Quando è stato eseguito se si esegue questo comando brew mostrerà le seguenti informazioni:

$ 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

I pezzi importanti ci sono queste linee:

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

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

Impostazione dell'ambiente GO

Ciò mostra dove è stato installato GO. È necessario eseguire le seguenti operazioni per configurare l'ambiente GO:

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

Puoi quindi controllare usando GO per vedere se è configurato correttamente:

$ 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"

Impostazione di json2csv

Sembra buono, quindi installiamo json2csv:

$ go get github.com/jehiah/json2csv
$

Cosa è appena successo? L'ha installato. Puoi controllare in questo modo:

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

OK, quindi perché non riesco a digitare la json2csvmia shell? Questo perché la /bindirectory sotto $GOPATHnon è nella tua $PATH.

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

Quindi aggiungiamolo temporaneamente:

$ export PATH=$GOPATH/bin:$PATH

E ricontrollare:

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

Ora è 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

Aggiungi le modifiche apportate al tuo $PATHe $GOPATHal tuo $HOME/.bash_profileper farle persistere tra i riavvii.


18

Guarda un video

In generale, consiglio sempre questo video ufficiale di Go per avere una rapida panoramica della questione:

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

È più facile essere mostrato che essere detto.

@jwfearn ha parafrasato la parte importante del video:

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


2
Eccellente video introduttivo: capisco sempre meglio quando mi viene mostrato.
Joshua Pinter,

3
Grazie @jwfearn - i video sono per la musica e altri divertimenti; impossibile copiare e incollare da loro :-)
kguest

5

Ho trovato più facile farlo in questo modo:

export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH

3

Per MAC questo ha funzionato bene per me.

sudo nano /etc/bashrc

e aggiungi il seguito alla fine del file

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

Questo dovrebbe risolvere il problema. Prova ad aprire un nuovo terminale ed echi $ GOPATH dovresti vedere il valore corretto.


2

(per MAC)

Ho provato tutte queste risposte e, per qualche motivo ancora sconosciuto, nessuno di loro ha funzionato.

Ho dovuto "forzare l'alimentazione" del GOPATH impostando la variabile d'ambiente per ogni comando che lo richiedeva. Per esempio:

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

Anche glidemi stava dando l' GOPATH not seterrore. Risolto, di nuovo, con "alimentazione forzata": ho provato tutte queste risposte e, per qualche motivo ancora sconosciuto, nessuno di loro ha funzionato.

Ho dovuto "forzare l'alimentazione" del GOPATH impostando la variabile d'ambiente per ogni comando che lo richiedeva.

sudo env GOPATH=$HOME/goWorkDirectory glide install

Spero che questo aiuti qualcuno.


2

Il tuo $GOROOTnon dovrebbe essere impostato. Dovresti $GOPATHessere impostato $HOME/godigitandoexport $GOPATH=$HOME/go

Si prega di digitare export GOROOT=""per risolvere il problema.


1

Fallo e basta export GOPATH="/whatever/you/like/your/GOPATH/to/be".


4
Se sono un goob, non so ancora "dove vorrei che fosse il mio GOPATH". IMHO è una seccatura che non esiste un comportamento GOPATH predefinito che può essere sovrascritto da una variabile di ambiente.
jwfearn,

0

Se si verifica questo problema dopo averlo $GOPATHconfigurato, è possibile che lo si stia eseguendo con una shell non supportata. Stavo usando fishe non ha funzionato, lanciandolo con ha bashfunzionato bene.


0

Puoi usare la soluzione "export" proprio come hanno suggerito altri ragazzi. Vorrei fornirti un'altra soluzione per comodità permanente: puoi usare qualsiasi percorso come GOPATH quando esegui i comandi Go.

Innanzitutto, devi scaricare un piccolo strumento chiamato gost: https://github.com/byte16/gost/releases . Se usi Ubuntu, puoi scaricare la versione di Linux ( https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz ).

Quindi è necessario eseguire i comandi seguenti per decomprimerlo:

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

Avresti un eseguibile gost. Puoi spostarlo /usr/local/binper un comodo utilizzo:

$ sudo mv gost /usr/local/bin

Eseguire il comando seguente per aggiungere il percorso che si desidera utilizzare come GOPATH mantiene nello spazio dei percorsigost . È necessario assegnare al percorso un nome da utilizzare in seguito.

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

Esegui qualsiasi comando Go desiderato nel formato:

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

Ad esempio, si desidera eseguire go get github.com/go-sql-driver/mysqlcon /home/foobar/baril GOPATH, basta fare come qui sotto:

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

Ti aiuterebbe a impostare GOPATH ed eseguire il comando. Ma ricorda che hai aggiunto il percorso nello spaziogost dei percorsi . Se ti trovi in ​​qualsiasi livello delle sottodirectory di /home/foobar/bar, puoi anche semplicemente eseguire il comando di seguito che farebbe la stessa cosa in breve:

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

gostè un semplice strumento di Go che può aiutarti a gestire GOPATH ed eseguire comandi Go. Per maggiori dettagli su come usarlo per eseguire altri comandi Go, puoi semplicemente eseguirlo gost help goCmdName. Ad esempio, per saperne di più install, basta digitare le parole in basso in:

$ gost help install

Puoi anche trovare maggiori dettagli nel README del progetto: https://github.com/byte16/gost/blob/master/README.md


0

Esegui 'go env' e vedi dove sta puntando il tuo GOPATH. Se si passa a quella directory, il comando 'go get..etc' dovrebbe funzionare.


0

Questo problema mi è stato riscontrato in Raspberry Pi. Ho effettuato l'accesso tramite il client VNC Il problema persisteva nonostante l'impostazione e l'esportazione di GOPATH. Quindi ho eseguito il comando "go get" senza sudo e ha funzionato perfettamente.


-1

Ho dovuto eseguire un'applicazione come root (per aprire un server web sulla porta 80), questo ha prodotto l'errore per me, perché l'utente sudo ha un ambiente diverso rispetto all'utente normale, quindi GOPATH non è stato impostato.

Se qualcun altro ha questo problema, aggiungi -Eal comando, questo preserverà l'ambiente dell'utente.

sudo -E go run main.go

Per ulteriori informazioni, consultare la discussione qui: Google Gruppi - Problema GOPATH


Non sono sicuro del motivo per cui questo è stato
sottoposto a downgrade
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.