2013-04-06 11 views
9

Sto avendo un problema abbastanza frustrante con lo GOPATH, che, nonostante sia impostato in .profile, non viene visualizzato quando si richiama go env, e non sembra influire sul luogo di destinazione go install.vai all'installazione tenta sempre di utilizzare GOROOT e GOPATH non è elencato sotto vai

Sto tentando di utilizzare go install per installare i pacchetti, e sto ricevendo questo errore, che mostra chiaramente che sta tentando di installare in /usr/lib/go, anziché la directory prevista di /home/me/dev/go.

$ go install github.com/songgao/colorgo 
go install github.com/songgao/go.pipeline: mkdir /usr/lib/go/pkg/linux_386/github.com: permission denied 

go env dà i seguenti risultati.

$ go env 
GOROOT="/usr/lib/go" 
GOBIN="" 
GOARCH="386" 
GOCHAR="8" 
GOOS="linux" 
GOEXE="" 
GOHOSTARCH="386" 
GOHOSTOS="linux" 
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_386" 
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread" 
CGO_ENABLED="1" 

Ma certamente è set.

$ echo $GOPATH 
/home/me/dev/go 

Update: Ho esportato GOPATH in ~/.profile e di provenienza, ma ho ancora lo stesso problema.

$ export GOPATH=/home/me/dev/go 
$ go env 
GOROOT="/usr/lib/go" 
GOBIN="" 
GOARCH="386" 
GOCHAR="8" 
GOOS="linux" 
GOEXE="" 
GOHOSTARCH="386" 
GOHOSTOS="linux" 
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_386" 
GOGCCFLAGS="-g -O2 -fPIC -m32 -pthread" 
CGO_ENABLED="1" 

Aggiornamento ancora: Questo problema ha cessato da quando ho aggiornato a go1.1beta2. Non sono sicuro di cosa si è verificato, perché GOPATH sembrava essere impostato correttamente, ma ora funziona tutto apparentemente.

+0

Avete esportato 'GOPATH'? Le variabili di shell vengono passate ai comandi eseguiti solo se le esporti. –

+0

L'alias 'go' viene eseguito su un altro comando o script wrapper? – Nevir

risposta

4

GOPATH and workspaces

$ mkdir -p $HOME/dev/go/src 
$ mkdir -p $HOME/dev/go/bin 

In $HOME/.profile:

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

Poi riavviare o disconnettersi e accedere

Appena effettuato il login, prima di ogni altra cosa, eseguire:.

$ env | grep -i '^GO' 
GOPATH=/home/me/dev/go 
$ cat $HOME/.profile 

Quale risultato ottieni?

+8

Il riavvio è un po 'duro :) Disconnettersi e accedere dovrebbe essere sufficiente, e 'source ~/.profile' in una shell aggiornerà quella shell, utile per test rapidi. – 9000

+9

Il riavvio non è assolutamente necessario. – zzzz

+0

Mi sono assicurato di esportare 'GOPATH' e ho seguito queste istruzioni senza fortuna. –

0

Come hai dato prova per aver impostato GOPATH, la seconda parte della tua domanda - GOPATH non è elencata sotto go env - potrebbe essere causata dal "go env" della tua versione installata. Né go1 (linux) né go1.0.2 (windows) versioni di "go env" mostrano GOPATH. Se guardi il sorgente (GOROOT/src/cmd/go/env.go), troverai in cima all'elenco degli elementi da mostrare (mkEnv) che inizia con GOROOT e fa non contiene GOPATH.

La versione go1.0.3 (Windows) mostra GOPATH; l'elenco corrispondente nella sorgente, tuttavia, inizia con GOARCH.

Ammetto che questo non risolve la prima parte del tuo problema - (cercando di) l'installazione in GOROOT - ma forse quanto sopra ti aiuterà a concentrarti sul colpevole (processo di costruzione).

0

penso che sia abbastanza chiaro che vanno installare tutto nella vostra GOTOOLDIR, GOTOOLDIR è anche legato con GOROOT:

Distinti: GOROOT = "/ usr/lib/go"

Secondo Document:

Installare gli strumenti Go

The Go d binario le istuzioni presuppongono che saranno installate in/usr/local/go (o c: \ Go sotto Windows), ma è possibile installarle in una posizione diversa. Se si esegue questa operazione, sarà necessario impostare la variabile di ambiente GOROOT su tale directory quando si utilizzano gli strumenti Go.

Per esempio, se avete installato Vai alla vostra directory home è necessario aggiungere i seguenti comandi a $ HOME/.profile:

export GOROOT = $ HOME/go

export PATH = $ PATH: $ GOROOT/bin

Gli utenti di Windows dovrebbero leggere la sezione sull'impostazione delle variabili di ambiente in Windows.

Dovresti seguire questi passaggi per cambiare il tuo GOROOT, invece di GOPATH, quindi tutto dovrebbe funzionare.

Se non funziona, cambia anche GOTOOLDIR.

-2

Creare un link simbolico, quindi copiare il andare binario in /usr/local come segue:

# ln -sf /usr/local/go/bin/go /usr/bin/go