2016-03-18 11 views
7

Sto provando a eseguire golang in una modalità interattiva.Errore "comando non trovato" con Golang

voglio usare go-eval per questo, ho seguito le README istruzioni:

  • mi sono imbattuto go get github.com/sbinet/go-eval/ successo
  • mi sono imbattuto go-eval che ha provocato -bash: go-eval: command not found

Qualche informazione in più:

  • echo $PATH rendimenti: /usr/local/go/bin:...

  • echo $GOPATH rendimenti: $HOME/golang

  • esecuzione whereis go-eval restituisce alcun output

  • esecuzione go install go-eval rendimenti:

    can't load package: package go-eval: cannot find package "go-eval" in any of: /usr/local/go/src/go-eval (from $GOROOT) $HOME/golang/src/go-eval (from $GOPATH)

+0

Qual è il tuo GOPATH? è GOPATH/bin nel tuo PATH? – user1431317

+0

è $ HOME/go/bin nel tuo PATH? – user1431317

+0

Perché downvote? Spiega per favore. – Forge

risposta

7

È necessario aggiungere GOPATH/bin a PATH.

PATH="$GOPATH/bin:$PATH" 

Aggiornamento: Starting with Go 1.8, default GOPATH a $HOME/go se non impostato. Il precedente numero non funzionerà se GOPATH non è impostato in modo esplicito.

Per impostare sia, aggiungere questo al vostro .profile:

export GOPATH="$HOME/go" 
PATH="$GOPATH/bin:$PATH" 
+0

Works. Devi ** letteralmente ** utilizzare "$ GOPATH" nel comando per ottenere una configurazione funzionante. Se si scrive manualmente il percorso completo, anche se valido e accurato, non sembra funzionare. In definitiva, quando esegui il test con "echo $ PATH", tutto quello che vedrai è solo il percorso. $ GOPATH viene utilizzato come puntatore alla variabile di ambiente, ma non è indicato in alcun modo quando si esegue il test con "echo $ PATH". – MarsAndBack

+0

Dovrebbe funzionare se si immette manualmente il percorso, $ GOPATH è più bello perché non è necessario codificare il percorso (assumendo che GOPATH sia impostato, che non è più necessario a partire da Go 1.8). – user1431317

4

È il binario go-eval in $GOPATH/bin? Stai eseguendo il comando con $GOPATH/bin/ come directory di lavoro? In caso contrario, questo è probabilmente il problema.

go get & go install installa andare binari (se presente) $GOPATH/bin

Controllare $GOPATH/bin per il binario di go-eval. Se è lì, prova a eseguirlo da $GOPATH/bin con ./go-eval. Se funziona, sei bravo.

In futuro, se si desidera eseguire i file binari trovati in $GOPATH/bin da qualsiasi punto della shell, aggiungere quanto segue al proprio.bashrc o profilo:

export PATH=$PATH:$GOPATH/bin

quindi riavviare il terminale o eseguire . ~/.bashrc o . /etc/profile

Quando si esegue l'installazione go go-eval ottengo:

non può caricare il pacchetto: pacchetto GO -eval: impossibile trovare il pacchetto "go-eval" in uno: /usr/local/go/src/go-eval (da $ GOROOT) $ HOME/golang/src/go-eval (da $ GOPATH)

Si ottiene l'errore sopra riportato perché go-eval non è in $HOME/golang/src/go-eval. L'esecuzione di go get github.com/sbinet/go-eval/ scaricherà l'origine su $GOPATH/src/github/sbinet/go-eval/. Se si desidera eseguire go install go-eval, è necessario specificare il nome del pacchetto relativo alla sua posizione nella gerarchia di directory in $GOPATH/src.

ad es. go install github/sbinet/go-eval

2

Vorrei aggiungere questo oltre alle risposte fornite.

Come suggerimento utile, è sempre possibile verificare i comandi con il comando quale.

Come ad esempio: che vanno

Se il comando non viene trovato, sai di avere un problema PATH è necessario affrontare prima.

Quindi è possibile concentrarsi sulla ricerca del comando con il comando di ricerca.

Come ad esempio: find/-name "go" -print 2>/dev/null

La prima barra è la directory per avviare la ricerca, l'argomento al -name è il comando che si' sto cercando e il -print ottiene un buon risultato. il 2>/dev/null invia risultati di directory che non sono accessibili a neverland (null) in modo che non sia necessario vedere un sacco di errori.

L'utilizzo di questo processo consente di trovare rapidamente il comando in questione e quindi è possibile aggiungerlo alla variabile env PATH e diventa accessibile come indicato nelle altre risposte.