Quali dovrebbero essere i valori di GOPATH e GOROOT?


323

Sto cercando di installare doozer in questo modo:

$ goinstall github.com/ha/doozer

Ottengo questi errori.

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally

3
@Motin il link sopra non è più valido
Jorrit Reedijk

Il file è diventato obsoleto per il progetto. Un problema relativo all'OSX è disponibile qui: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin

Nota: per impostazione predefinita, GOPATHverrà impostato per te in Go 1.8 (2017). Vedi la mia risposta qui sotto
VonC

Sì, ho trovato anche questi confusi, il modo in cui sono organizzati i godoc. Ciò ha aiutato: albertech.blogspot.com/2017/01/…
jar

1
@BenyaminJafari perché goinstallè pre-Go1 davvero antico e non esiste dal 2012.
Dave C

Risposte:


310

GOPATHè discusso nella cmd/godocumentazione :

La GOPATHvariabile d'ambiente elenca i luoghi in cui cercare il codice Go. Su Unix, il valore è una stringa separata da due punti. Su Windows, il valore è una stringa separata da punto e virgola. Nel piano 9, il valore è un elenco.

GOPATH deve essere impostato per ottenere, compilare e installare pacchetti all'esterno dell'albero standard Go.

GOROOTè discusso nelle istruzioni di installazione :

Le distribuzioni binarie Go presuppongono che saranno installate in /usr/local/go(o c:\Gosotto Windows), ma è possibile installare gli strumenti Go in una posizione diversa. In questo caso è necessario impostare la GOROOTvariabile di ambiente in modo che punti alla directory in cui è stata installata.

Ad esempio, se hai installato Vai alla tua home directory devi aggiungere i seguenti comandi a $HOME/.profile:

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

Nota: GOROOT deve essere impostato solo durante l'installazione in un percorso personalizzato.

(versione aggiornata della risposta di Chris Bunch .)


44
Informazioni molto più complete su GOPATH sono disponibili su Come scrivere il codice Go. È necessaria una comprensione delle informazioni necessarie per comprendere il gocomando, che è essenziale per lavorare con Go. Ad esempio, l'uso di goinstallnel PO ora dovrebbe essere go get.
Sonia,

13
Nota anche il percorso di installazione effettivo di go. Ad esempio, in una configurazione homebrew predefinita, homebrew installerà go in /usr/local/Cellar/go/. In questo caso, il percorso di esportazione deve essere impostato con export GOROOT=/usr/local/Cellar/go/{version}e export PATH=$PATH:$GOROOT/bin.
ekillaby

10
Ho dovuto fare export GOROOT=/usr/local/Cellar/go/1.2/libexec/per far funzionare la mia birra.
Steven Soroka,

Non posso suggerire questa modifica perché l'app si lamenta del fatto che la mia modifica "sembra contenere" codice non formattato (cosa che non fa; grazie mille SO) ma:
Wildcard

A partire da Go 1.10, se GOROOT non è impostato, lo strumento go proverà a capirlo dalla propria posizione. Inoltre non riesco a incollare il collegamento perché incolla non funziona nell'app iOS di Stack Exchange. Molto frustrato in questo momento.
Wildcard

97

Ecco una mia semplice configurazione:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

GOROOT, GOPATH, PATH sono impostati come segue:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Quindi, in breve:

GOROOT è per compilatore / strumenti che provengono dall'installazione go.
GOPATH è per i tuoi progetti go / librerie di terze parti (scaricati con "go get").


Penso che questa risposta sia più facile da capire in quanto esiste una mappatura rispetto alla struttura delle cartelle.
h-rai,

GOPATH include interi alberi del progetto (ad es. Git) con file non-go - ad es. Immagini, script, file di build, ecc.?
Serge Merzliakov,

52

Prima esecuzione go env.
Se vedi che go non è installato, puoi installarlo tramite homebrewo tramite pacchetto e / o altri modi.
Se vedi l'output, il tuo Goè installato.
Ti mostra tutti gli env che sono impostati e non lo sono.

Se vedi vuoto per GOROOT:

  1. Esegui which go(Sul mio computer /usr/local/go/bin/go:)
  2. quindi esporta in questo modo export GOROOT=/usr/local/go

Se vedi vuoto per GOPATH:

  1. Crea qualsiasi directory ovunque sul tuo computer per progetti go nel mio caso: ~/GO_PROJECTS
  2. Poi export GOPATH=~/GO_PROJECTS

2
which gofatto per me. Stava usando un altro percorso di installazione di una precedente installazione usando Chocolatey. Eliminata quella cartella e rimossa dalla variabile PATH. Ora funziona. Grazie!
sgarg

which gocomando non ha funzionato per me in Windows 7. Come posso trovare dove devo eseguire questo comando
firstpostcommenter

Il comando windows corrispondente è where goche ti mostrerà il percorso del file eseguito
Falco,

export GOPATH=~/GO_PROJECTSha fatto un lavoro
Thamaraiselvam il

39

GOPATHè discusso qui :

La GOPATHvariabile d'ambiente

GOPATH può essere impostato su un elenco separato da due punti di percorsi all'interno dei quali è possibile trovare codice Go, oggetti pacchetto ed eseguibili.

Impostare a GOPATHper utilizzare goinstall per compilare e installare il proprio codice e le librerie esterne all'esterno dell'albero Go (ed evitare di scrivere Makefile).

Ed GOROOTè discusso qui :

$GOROOTLa radice dell'albero Go, spesso $HOME/go. L'impostazione predefinita è il genitore della directory in cui all.bashviene eseguito. Se si sceglie di non impostare $GOROOT, è necessario eseguire gomake invece di make o gmake durante lo sviluppo di programmi Go utilizzando i makefile convenzionali.


quindi se ho installato go su ~ / projects / go, quali dovrebbero essere i valori della variabile per trovare os, fmt, ecc?
jshen,

2
Quindi, dove va installato Go quando sudo apt-get install golang?
weberc2,

9
@ weberc2 se corri go envdovresti vedere queste informazioni, per me lo era/usr/lib/go/
Andre

19

Ho letto i go help gopathdocumenti ed ero ancora incredibilmente confuso, ma ho trovato questa piccola pepita da un'altra pagina dei documenti:

La variabile di ambiente GOPATH specifica la posizione dell'area di lavoro. È probabilmente l'unica variabile d'ambiente che dovrai impostare durante lo sviluppo del codice Go.

http://golang.org/doc/code.html#GOPATH


10

GOPATH non dovrebbe puntare all'installazione Go, ma piuttosto al tuo spazio di lavoro (vedi https://golang.org/doc/code.html#GOPATH ). Ogni volta che installi un pacchetto con go get o go install, atterrerà all'interno di GOPATH. Questo è il motivo per cui ti avverte che sicuramente non vuoi che pacchetti casuali da Internet vengano scaricati nella tua installazione ufficiale.


9

A partire da go 1.8 (Q2 2017), GOPATH sarà impostato automaticamente su $ HOME / go

Vedi il numero 17262 e il commento di Rob Pike:

$HOME/gosarà.
Non esiste una risposta migliore ma questa è breve e dolce, e può essere un problema scegliere quel nome solo se $HOME/goesiste già, il che sarà felice solo per gli esperti che sono già stati installati e capiranno GOPATH.


Come può un argomento così semplice diventare così complesso! Grazie per la migliore risposta qui.
dodgy_coder

@dodgy_coder In realtà ... guarda le prime due righe della mia altra risposta: stackoverflow.com/a/37905102/6309 ;) Potrebbe finire per essere ancora più semplice: niente più GOPATH! Maggiori dettagli in stackoverflow.com/a/48914523/6309 .
VonC,

sì, sono d'accordo, GOPATH non è realmente richiesto se si utilizza l'impostazione predefinita, è corretto? Avevo bisogno di impostarlo comunque perché richiesto per l'ambiente di sviluppo di Google App Engine (Go Standard). In realtà ti dicono di impostare GOPATH, ma non dirti su quale valore impostarlo su ..!
dodgy_coder

@dodgy_coder Sì, per impostazione predefinita, Go cercherà il progetto PATH in un valore predeterminato fisso.
VonC,

6

Come menzionato sopra:

La variabile di ambiente GOPATH specifica la posizione dell'area di lavoro.

Per Windows , questo ha funzionato per me (nella finestra Ms-dos):

set GOPATH=D:\my_folder_for_go_code\

Questo crea una variabile GOPATH che Ms-dos riconosce quando usata come segue:

cd %GOPATH%

3

Per quanto riguarda in GOROOTparticolare, Go 1.9 lo imposterà automaticamente sul suo percorso di installazione.
Anche se hai installato più Go, chiamando 1.9.x verrà impostato GOROOTsu /path/to/go/1.9(prima, se non impostato, assumeva un percorso predefinito come /usr/local/goo c:\Go).

Vedi CL Go Review 53370 :

L' go toolora userà il percorso da cui è stato invocato per tentare di localizzare la radice del Go installazione dell'albero .
Ciò significa che se l'intera installazione di Go viene spostata in una nuova posizione, go tooldovrebbe continuare a funzionare normalmente.

Questo può essere annullato dall'impostazione GOROOTnell'ambiente, che dovrebbe essere fatto solo in circostanze insolite.
Si noti che ciò non influisce sul risultato della runtime.GOROOT()funzione , che continuerà a riportare la posizione di installazione originale; questo potrebbe essere risolto nelle versioni successive.


0

A partire dalla versione 2020 e Go 1.13+, in Windows il modo migliore per aggiornare GOPATH è semplicemente digitare il prompt dei comandi:

setx GOPATH C:\mynewgopath

0

Ecco una soluzione (singolo utente):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

gosi lamenta se si .gopathpassa a.go .

Vorrei che andassero con come rust/cargofacevano i ragazzi e mettessero tutto in un unico posto.


-1

in osx, ho installato con brew, ecco l'impostazione che funziona per me

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"

-1

Ho dovuto aggiungere

export GOROOT=/usr/local/Cellar/go/1.10.1/libexec

al mio ~ / .bash_profile su Mac OS X


-1

C'è anche un caso in cui quando usiamo go compila tutti i file go.

Supponiamo quindi di avere un file main.go e successivamente abbiamo modificato il file corrente in main_old.go e quindi aggiunto il nostro nuovo file main.go. Quindi quando creiamo la nostra app verranno compilati tutti i file go. Quindi l'errore che sta accadendo potrebbe essere dovuto all'errore di compilazione in alcuni altri file go.


-1

Una volta installato Go lang, GOROOT è la directory principale dell'installazione.

Quando ho fatto esplodere il binario Go Lang nella directory C: \ di Windows, il mio GOROOT dovrebbe essere C: \ go. Se installato con Windows Installer, potrebbe essere C: \ Programmi \ go (o C: \ Programmi (x86) \ go, per pacchetti a 64 bit)

 GOROOT = C:\go

mentre il mio GOPATH è la posizione del codice sorgente o dell'area di lavoro di Google Lang.

Se il mio codice sorgente Go lang si trova in C: \ Users \\ GO_Workspace, il tuo GOPATH sarebbe il seguente:

 GOPATH = C:\Users\<xyz>\GO_Workspace

-1

Non è necessario impostare esplicitamente GOROOT(le versioni moderne di Go possono capirlo da sole in base alla posizione del binario go che si esegue).

Inoltre, viene visualizzato il seguente errore quando si tenta di lavorare con vgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

Rimozione di GOROOT, aggiornamento di GOPATH e export GO111MODULE="on"risoluzione del problema.

GOPATH vedi qui

GOPATH può essere impostato su un elenco separato da due punti di percorsi all'interno dei quali è possibile trovare codice Go, oggetti pacchetto ed eseguibili.

Impostare un GOPATH per utilizzare goinstall per compilare e installare il proprio codice e le librerie esterne all'esterno dell'albero Go (ed evitare di scrivere Makefile).


-2

i valori dovrebbero essere (MACOS):

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)

-3

Se stai usando la distro go, dovresti indicare dove sono i file include, ad esempio:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(Questo è per Fedora 20)

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.