Come posso impostare la variabile d'ambiente GOPATH su Ubuntu? Quale file devo modificare?


258

Sto cercando di fare un go get:

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

e non riesce con il seguente errore:

package github.com/go-sql-driver/mysql: cannot download, $GOPATH not set. For more details see: go help gopath

quando faccio un go env, un elenco di valori Go viene mostrato come di seguito:

ubuntu@ip-xxx-x-xx-x:~$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"

chiaramente il GOPATH non è impostato, come e dove devo impostarlo?

Vedo molti thread che menzionano questo errore ma nessuno che fornisce una risposta alla mia domanda, quale file deve essere modificato per fornire un valore per questo percorso?


Che shell stai usando?
fuz,

3
Oltre alle risposte su come impostarlo, vedere questa risposta SO , che chiarisce cos'è il GOPATH e come dovrebbe essere usato in generale
Louis Maddox,



1
Nota: Go 1.8+ (Q2 2017) verrà impostato GOPATHper te: vedi la mia risposta di seguito .
VonC,

Risposte:


284

Nuovo modo:

Dai un'occhiata a questa risposta.

Vecchio modo:

Aggiungi le seguenti righe a ~ / .bashrc e questo persisterà. Tuttavia, puoi usare altri percorsi che ti piacciono come GOPATH invece di $ HOME / vai nel mio esempio.

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

14
Il percorso era /usr/share/gosul mio Ubuntu 13.10.
Tsusanka,

35
NON utilizzare / usr / share / go. GOPATH è lo "spazio di lavoro" di go, dove scarica pacchetti, eccetera. Crea una nuova directory e usala. Raccomando ~ / .go
Bryan Larsen il

16
Come indicato nella risposta di user2128535, GOROOT dovrebbe essere impostato su / usr / lib / go
sinceramente il


12
Ricordati di $ source ~/.bashrc;)
eversor

65

Ubuntu 14.04

export GOPATH=$HOME/go

Inoltre è possibile aggiungere questa stringa al file

$HOME/.bashrc

1
Il tuo commento è confuso perché si riferisce a una riga ora rimossa della risposta originale.
Marcel Burkhard,

mkdir -p ~ / go / bin export GOPATH = ~ / go export PERCORSO = $ PERCORSO: $ GOPATH / bin:
Alex Punnen

61

GOPATH dovrebbe essere impostato su una directory vuota appena creata. Questo è lo "spazio di lavoro", dove scarica i pacchetti, eccetera. Uso ~ / .go.

Per esempio:

mkdir ~/.go
echo "GOPATH=$HOME/.go" >> ~/.bashrc
echo "export GOPATH" >> ~/.bashrc
echo "PATH=\$PATH:\$GOPATH/bin # Add GOPATH/bin to PATH for scripting" >> ~/.bashrc
source ~/.bashrc

fonte: http : //www.larry-cout24/blog/2013/12/15/setting-up-a-go-environment-in-ubuntu-12-dot-04/


1
Grazie mille
Dylan B,

35

New Way: Go Modules

Da Go 1.11, non devi più usare GOPATH. Basta andare alla directory del progetto e farlo una volta:

go mod init github.com/youruser/yourrepo
  • Con questo, Go crea un modulo root in quella directory.
  • Puoi creare quanti moduli vuoi.
  • Per istruzioni dettagliate, vedere anche questa risposta .

Old Way: GOPATH

Se insisti a lavorare con GOPATH, fai attenzione a questo:

  • Da Go 1.8, non è necessario impostare GOPATH o GOROOT.
  • GOPATH per impostazione predefinita si trova nella directory utente / home.

Dalla documentazione :

Se non è impostato GOPATH, si presume che sia $ HOME / go su sistemi Unix e% USERPROFILE% \ go su Windows. Se si desidera utilizzare una posizione personalizzata come area di lavoro, è possibile impostare la variabile di ambiente GOPATH.


34

Se per esempio, è un Ubuntu, dopo aver installato i pacchetti:

$sudo apt install golang -y

Aggiungi le seguenti righe a ~ / .bashrc (del tuo utente)

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

19
export GOPATH=/path/desired/here

Non è necessario modificare alcun file, possiamo semplicemente usare il comando sopra per modificare direttamente le variabili di ambiente Go.


11
Questo non è persistente però. Se vuoi che questa opzione rimanga - probabilmente lo fai - dovrai aggiungerla ad alcuni file che vengono caricati al momento dell'accesso.
Cubico

1
Grazie! Ciò che la maggior parte degli utenti non pensa mai è che ci siano persone che iniziano con Linux e se non c'è documentazione che dice quello che hai detto (Perché tutti pensano che sia un fatto noto) come impareremmo / troveremo le informazioni?
PlayHardGoPro

19

Scrivi questo codice nel Terminale.

export GOPATH=path/to/your/gopath/directory

Nota : questo verrà ripristinato ad ogni nuova finestra Terminale o riavvio del sistema.

Per essere persistente, incolla il codice qui sotto nel tuo .zshrco .bashrcfile in base alla tua shell. Quei file nella tua home directory . Sarà come sotto.

export PATH=path/to/some/other/place/composer/for/example
export GOPATH=path/to/your/gopath/directory
export PATH=$PATH:$GOPATH/bin

11

Avrai bisogno di GOPATH anche in seguito. Quindi aggiungilo a ~/.bashrc.


10
Sì, avevo in mente questo, ma ho respinto la possibilità che un ragazzo avrebbe una scatola Ubuntu con una shell personalizzata e non la conosca come altamente improbabile :-)
Vytautas Shaltenis

9

Se hai impostato qualcosa che richiede la modifica delle variabili di ambiente, ad esempio Java, Go ecc., Questo sarà molto familiare.

Presumo che tu abbia la seguente struttura di directory da qualche parte come percorso Go:

\---[folder name]
    +---bin
    +---pkg
    \---src
  • aprire un nuovo terminale
  • genere sudo nano /etc/environment
  • trovare PATH=...e andare alla fine di esso e aggiungere due punti :dopo l'ultimo percorso quindi incollare nel vostro pieno go pathpe/home/user/gocode

e il gioco è fatto, questo dovrebbe renderlo persistente attraverso il sistema.


1
Non vedo perché cambiare $ PATH se go funziona per David. Deve impostare $ GOPATH (vedi la risposta di Daniel Lin). David può unire entrambi gli approcci (o impostarlo in / etc / profile o $ HOME / .profile). A proposito, consiglio a David di leggere questi link: golang.org/doc/install e golang.org/doc/code.html#GOPATH
zk82

2
@ zk82 $ GOPATH è una variabile d'ambiente e non vedo perché modificare le variabili d'ambiente per aggiungere questa variabile ad essa sia un problema. Lo stesso vale per $ JAVA_HOME e altri framework che richiedono tale configurazione.
ymg

Va bene, ho capito. Grazie per il tuo commento.
zk82,

3

Questo è ciò che ha funzionato per me su Ubuntu 15.10 usando fish shell:

# ~/.config/fish/config.fish

set -g -x PATH /usr/local/bin $PATH
set -g -x GOPATH /usr/share/go

Quindi ho dovuto modificare i permessi sulla gocartella (era impostato su root)

sudo chown <name>:<name> -R /usr/share/go

3

go path potrebbe essere ovunque tu voglia semplicemente creare una directory e impostare la variabile path globale nel nome di GOPATH nel tuo ambiente.

mkdir ~/go
export GOPATH=~/go
go get github.com/go-sql-driver/mysql

2

Con Go 1.8 (Q2 2017), non dovrai modificare alcun file se accetti il GOPATHvalore predefinito (impostato per te)

$HOME/go

Puoi vedere i commenti sulla questione 17262 e il voto twitter associato :

Scegliendo un valore predefinito GOPATH, possiamo semplificare la nostra documentazione perché possiamo dire cose come

$ go get github.com/foo/bar

verificherà il github.com/foo/barrepository in $HOME/go/src/github.com/foo/bar.

Non abbiamo bisogno di distrarre i nuovi arrivati ​​con la necessità di impostare un ambiente, tutto ciò che dobbiamo fare è mettere una piccola nota tra parentesi in fondo alla pagina

$HOME/goè il percorso predefinito per l'area di lavoro di go.
Se si desidera modificare questo percorso, impostare la GOPATHvariabile su qualcosa di propria scelta.


2

Il mio ambiente go sembrava simile al tuo.

$go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go-1.6"
GOTOOLDIR="/usr/lib/go-1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

L'ho risolto impostando GOPATH su / usr / lib / go . Provalo.

export GOPATH=/usr/lib/go
export PATH=$PATH:$GOPATH/bin

Ho letto da qualche parte che impostare GOPATH come la directory di installazione è una cattiva idea. Oo
ankush981

2

GOPATH è una variabile d'ambiente in base alla posizione dello spazio di lavoro. GOROOT è una variabile d'ambiente nella directory di installazione. Sebbene GOROOT e GOPATH siano impostati automaticamente (se non ci sarebbe un bug) durante il tempo di installazione, per specificarlo manualmente è possibile seguire il processo seguente. Inoltre, per ulteriori informazioni è possibile fare riferimento alla pagina wiki di GO .

È meglio impostare GOPATH su una directory all'interno della home directory, ad esempio $ HOME / go,% USERPROFILE% \ go (Windows).

  1. Questa è una soluzione mac, che è testata su macOS Sierra, ver. 10.12, e anche in Gogland-EAP, che è stato introdotto come IDE per la programmazione Go da JetBrains.

Sul tuo tipo di terminale

vim ~/.profile

nel documento aperto sul Terminale premere i e aggiungere il seguente percorso

GOPATH=/path/to/a/directory/inside/home/directory
GOROOT=/path/to/you/go/library
PATH=$PATH:$GOPATH:$GOROOT:$GOROOT/bin

premere ESC e digitare : x . Infine, è necessario riavviare ( chiudere e aprire ) il terminale o Disconnettersi e accedere nuovamente.

  1. Per la configurazione di Windows e Linux, consultare la pagina Go wiki su Githab su Impostazione GOPATH-Golang .

ATTENZIONE Non impostare GOROOT e GOPATH sulla stessa directory, altrimenti verrà visualizzato un avviso.


2
export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin

E potresti voler controllare per $ go env


2

(Ubuntu)

Se non si imposta un GOPATH, verrà utilizzato il valore predefinito.

Devi aggiungere $ GOPATH / bin al tuo PERCORSO per eseguire qualsiasi binario installato in $ GOPATH / bin, oppure devi digitare $ GOPATH / bin / the-command. Aggiungi questo al tuo ~ / .bash_profile

export PATH=$GOPATH/bin:$PATH

Comando GOPATH corrente:

go env GOPATH

Modifica del comando GOPATH:

export GOPATH=$HOME/your-desired-path


0

Questa è stata la cosa più fastidiosa da affrontare. Nella speranza di risparmiare tempo.

IF go è stato installato come utente root. L'utente root del file di testo bash_profile del sistema ~ / .bash_profile deve avere $ GOROOT assegnato alla directory go install e $ GOPATH deve essere assegnato alla directory go / src.

  ...$# sudo su
  ...$# vi ~/.bash_profile

    ***Story continues in vi editor***

    GOROOT=$GOROOT:/usr/local/go
    GOPATH=$GOPATH:/usr/local/go/src
    ...
    [your regular PATH stuff here]
    ...

assicurati che il percorso per diventare binario sia nel tuo percorso su .bash_profile

PATH = $ PATH: $ HOME / bin: / usr / local / bin: / usr / local / go / bin

Questo PERCORSO può essere lungo quanto una stringa deve essere..per aggiungere nuovi elementi separati da due punti:

uscire dall'editor vi e salvare il profilo bash (: wq sta per scrivere ed uscire)

  [esc] 
  [shift] + [:] 
  :wq

Devi disconnetterti dal terminale e riconnetterti per riavviare il profilo .. oppure puoi semplicemente avviarlo usando export.

...$# export GOPATH=/usr/local/go/src

Puoi verificare go env:

...$# go env

Sìì!

GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/usr/local/go/src"
GORACE=""
GOROOT="/usr/local/go"

Ora puoi fare sudo e andare, potrai scaricare e creare directory all'interno di go / src e puoi scendere a quello che stavi cercando di fare.

esempio

# sudo go get github.com/..

Ora incontrerai un altro problema ... potresti non aver installato git ... questa è un'altra avventura .. :)


Non farlo Tu non vogliono compilare le cose come root e voi non volete go getmettere niente da nessuna parte vicino GOROOT.
Dave C,

Come si esegue una corsa con un utente normale? Grazie mille. Le cose non funzionavano durante il processo di installazione e ho finito per usare una macchina virtuale di prova per provare GO.
user3151532

0

Sulla mia macchina Fedora 20 ho aggiunto le seguenti righe al mio ~ / .bashrc:

export GOROOT=/usr/lib/golang
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

3
Non impostareGOROOT . (A meno che non ci si trovi in ​​un sottogruppo di persone estremamente piccolo che utilizza una distribuzione binaria di Go ma lo installa da qualche parte dove non è standard.)
Dave C

0

Ancora un'altra soluzione: esportare ogni GO*variabile d'ambiente dago env

.bashrc:

eval $(go env | grep '^GO[A-Z0-9_]*=' | while read setenv; do
  echo "export $setenv; "
done 2> /dev/null)

[[ -n $GOPATH ]] || export GOPATH="$HOME/go/bin"
[[ -n $GOROOT ]] || export GOROOT=/usr/bin/go
export PATH="$PATH:$GOPATH/bin:$GOROOT/bin"

1
evaldi solito è una cattiva idea e un eccesso in questa situazione IMHO
Paweł Prażak

@ PawełPrażak Perché? (Non sono un esperto di shell script)
DMaster

1
se c'è un bug in ciò che viene valutato, le conseguenze possono essere dolorose; qui la domanda era come esportare GOPATHsolo
Paweł Prażak il

0

Modifica il tuo ~/.bash_profileper aggiungere la seguente riga:

$ export GOPATH=$HOME/work

Salva ed esci dal tuo editor. Quindi, fonte il tuo~/.bash_profile

$ source ~/.bash_profile

Nota: impostare il percorso GOBIN per generare un file binario quando si avvia go install

$ export GOBIN=$HOME/work/bin


-1

Come scritto nelle istruzioni ufficiali :

La variabile di ambiente GOPATH specifica la posizione dell'area di lavoro. L'impostazione predefinita è una directory denominata go all'interno della home directory, quindi $ HOME / vai su Unix, $ home / vai al piano 9 e% USERPROFILE% \ go (di solito C: \ Users \ Nomeutente \ go) su Windows. Se desideri lavorare in una posizione diversa, dovrai impostare GOPATH sul percorso di quella directory. (Un'altra impostazione comune è impostare GOPATH = $ HOME.) Nota che GOPATH non deve essere lo stesso percorso dell'installazione di Go.

Quindi, ad esempio, se stai programmando in Jetbrains Webstorm (usando il plugin Go ), potresti voler impostare GOPATHcome /Users/<user>/WebstormProjects.

In parole più semplici, impostalo su dove vuoi che risiedano i tuoi progetti Go.


-1

Puoi usare la soluzione "export" proprio come hanno suggerito altri ragazzi. Vorrei offrirti 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

Otterresti un eseguibile gost. Puoi spostarlo in /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 gost mantiene lo spazio dei percorsi . È 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


-1

Devi aggiornare il PERCORSO in base al terminale (bash o zsh) che usi.

  1. Aprire il file di script della shell del terminale, ovvero ~/.bashrco ~/.zshrcin un editor
   vi ~/.zshrc
      (or)
   code ~/.zshrc
  1. Aggiorna il GOPATH di seguito se già trovato o aggiungi la riga di seguito.

export GOPATH=$HOME/go:/$HOME/projects/go

Qui puoi aggiungere uno o più percorsi separati da un punto e virgola :da diverse posizioni dei tuoi progetti GO sul sistema alla GOPATHvariabile d'ambiente, ad es /path/1:path/2:path/3.

Nel mio caso, ho aggiunto 2 percorsi, come mostrato sopra, uno dalla radice $HOME/goe l'altro dalla directory dei progetti:/$HOME/projects/go

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.