2012-09-20 11 views
14

Questo è un po un follow-up alla mia ultima domanda: golang: installing packages in a local directorygolang: andare installare tentativi/usr/local invece di GOPATH

devo GOPATH insieme a $HOME/prog/go/gopath e questo percorso esiste con tre directory:

~/prog/go/gopath$ ls 
bin pkg src 

Ora cerco di installare un module to access the redis database, che mi chiede di eseguire

go install 

all'interno della directory di origine. Ma il comando go install mi dà

~/prog/go/gopath/src/redis (go1)$ go install 
go install flag: open /usr/local/go/pkg/darwin_amd64/flag.a: permission denied 
~/prog/go/gopath/src/redis (go1)$ echo $GOPATH 
<myhomedir>/prog/go/gopath 

(dove <myhomedir> è un percorso valido)

Domanda 1: Perché go install non prenda $GOPATH in considerazione? Domanda 2: come convincere go install a utilizzare $GOPATH?

risposta

6

Non si è sicuri della modalità di installazione, ma è possibile che sia necessario creare pacchetti dalla libreria std ma non a causa di autorizzazioni. Si può provare

Questo dovrebbe creare la libreria std ed eseguire test per assicurarsi che sia tutto ok.

Assicurarsi di disporre delle autorizzazioni appropriate per leggere ed eseguire da $ GOROOT se necessario. Personalmente ho appena scaricato l'archivio da golang.org e lo tengo in ~/local/go e settiamo GOROOT in modo appropriato.

+0

Non sono sicuro di capire cosa faccia. La mia installazione di go funziona bene finora. Mai avuto problemi e persino la compilazione incrociata funziona bene. – topskip

+0

hai il permesso di leggere /usr/local/go/pkg/darwin_amd64/flag.a? – dskinner

+0

sì, posso leggere '/ usr/local/go/pkg/darwin_amd64/flag.a' come il mio utente principale – topskip

3

penso che il comando che vi serve è "andare a prendere":

go get github.com/alphazero/Go-Redis 

si scarica la libreria Go-Redis e metterlo nella directory $ GOPATH/src.

go installa esegue una compilazione e installa sul proprio codice sorgente.

Devo ammettere che ho lottato con questo concetto per un po ', ma un'attenta rilettura di "How to Write Go" e la sezione sull'organizzazione del codice contiene ciò che è necessario sapere su come funziona il comando go.

+0

Questo mi dà lo stesso errore ... – topskip

+0

... btw: il 'go get' dovrebbe essere senza' https: // 'da quello che ho provato. Grazie per il collegamento a "How to Write Go"! – topskip

+0

Non è GOPATH un elenco di percorsi (analogo al PERCORSO)? Questo è quello che dice la documentazione, se ricordo bene. Sei sicuro di non voler dire GOROOT? – weberc2

0

La soluzione è rimuovere GOROOT dal tuo .bash_profile. Quindi il comando go lo installerà nella tua directory GOPATH. E così strano è: quando ho impostato di nuovo il GOROOT nel mio .bash_profile e ho creato una nuova shell, funziona anche.

5

Problemi simili qui. Quando controllo il mio $ GOROOT, trovo che tutte le librerie sono già state create lì. Ma per alcuni motivi, tenta di ricostruire tutte le librerie. Quindi faccio solo un piccolo trucco:

find /usr/lib/go/pkg/ -name "*.*" | sudo xargs touch 

Quindi tutto funziona correttamente.

+0

A causa delle differenze di data e ora tra i file in $ GOROOT/src e $ GOROOT/pkg, i file pkg vengono determinati non aggiornati e stanno tentando di essere ricostruito. Ma poiché non sono scrivibili dall'utente, c'è un errore di autorizzazione negato. Toccando ogni file .a si risolve il problema. –

+1

Il comando che ho eseguito era leggermente diverso: 'find/usr/local/go -name" * .a "-exec touch -r \' che va \ '{} \;' –

Problemi correlati