2016-03-30 8 views
-2

Go Umwelt:konnte nicht gehen bekommen Paket installiert

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

Go Version:

$ go version 
go version go1.6 linux/amd64 

Fehler beim Laufen:

$ sudo -E go get -u golang.org/x/crypto/ssh 
package golang.org/x/crypto/ssh 
    imports bufio: unrecognized import path "bufio" 
package golang.org/x/crypto/ssh 
    imports bytes: unrecognized import path "bytes" 
package golang.org/x/crypto/ssh 
    imports crypto: unrecognized import path "crypto" 
package golang.org/x/crypto/ssh 
+1

Kein sudo bitte. – Volker

+1

Du hast deine 'go env' mit einem User gezeigt, dann gehst du mit einem anderen User ('sudo -E go go get') los, der ein anderes' go env' haben könnte. – icza

+0

Danke @icza für schnelle Antwort. – Purandar

Antwort

0

sudo -E Änderungen an Wurzel und bewahrt die Umgebungsvariablen . In diesem Fall sind dies die Env-Variablen der Shell und nicht von go.

Sie können mehr darüber lesen, wie sudo -E arbeitet here

Da Ihr GOTOOLDIR="/home/stack/go/pkg/tool/linux_amd64" zeigt, dass es für den Benutzer installiert ist stack (wahrscheinlich) - Sie haben go get als Benutzer verwenden stack

+0

Danke @Hugo. Ich konnte das lösen, ohne sudo verwenden zu müssen, damit es als Stack-Benutzer ausgeführt wird. Zuvor hatte ich ein Berechtigungsproblem, das ist der Grund, warum ich sudo -E verwendet habe, um Umgebungsvariablen beizubehalten, aber das ändert den Benutzer in root, wobei env erhalten bleibt, wie ihr erwähnt habt. Ich änderte den Besitz des Ordners, auf den GOPATH zeigte, um zu stapeln, und es funktionierte gut. – Purandar

0

Godep and vendor wert Blick in. Genau wie Paketmanager wie npm und pip, verhindert die Arbeit mit Abhängigkeiten innerhalb des Projektverzeichnisses Konflikte mit der Version und vermeidet die Verwendung von $GOPATH.

Eine einfachere Alternative ist Glide. Es vereinfacht das Abhängigkeitsmanagement erheblich und funktioniert ähnlich wie Godep mit glide.yaml und glide.lock Dateien, um Abhängigkeiten und ihre Versionen anstelle von Godep.json zu steuern.

Wenn Sie mit npm oder cargo gearbeitet haben, ist es sehr ähnlich:

# Create manifest 
$ glide init 

# Get packages 
$ glide get path/to/package 

# Update package 
$ glide update 

# Remove package 
$ glide remove path/to/package 

Pakete zu vendor/ gespeichert werden wie Godep ist (in Standard 1.6 gehen irgendeine Weise).

Verwandte Themen