webentwicklung-frage-antwort-db.com.de

GOBIN nicht festgelegt: Go Install kann nicht ausgeführt werden

Ich versuche, mein benutzerdefiniertes Paket für meine main.go-Datei zu installieren. Als ich jedoch rannte

go install custom.go

Ich habe diesen Fehler bekommen

go install: no install location for .go files listed on command line (GOBIN not set)

Wie stelle ich GOBIN ein?

71
user3918985

Überprüfen Sie Ihre Variable GOPATH.
Stelle sicher:

  • ihre Quellen sind unter GOPATH/src
  • sie haben einen bin-Ordner in Ihrem GOPATH-Ordner.

Siehe GOPATH-Umgebungsvariable (wobei 'DIR' ein GOPATH-Ordner ist):

Das bin-Verzeichnis enthält kompilierte Befehle.
Jeder Befehl wird nach seinem Quellverzeichnis benannt, aber nur das letzte Element, nicht der gesamte Pfad. Das heißt, der Befehl mit der Quelle in DIR/src/foo/quux wird in DIR/bin/quux installiert, nicht in DIR/bin/foo/quux. Das Präfix "foo/" wird entfernt, sodass Sie PATHDIR/bin hinzufügen können, um die installierten Befehle abzurufen. 

Wenn die Umgebungsvariable GOBIN gesetzt ist, werden Befehle in dem Verzeichnis installiert, in dem sie nicht DIR/bin heißt. GOBIN muss ein absoluter Pfad sein. 


Zum Beispiel dieser Thread zeigt, was passiert, wenn ein Go-Build außerhalb von GOPATH/src ausgeführt wird:

Anscheinend ist GOPATH auf ~/go eingestellt, aber Sie haben den Befehl go install für ~/dev/go ausgeführt.

Siehe Go Build

Der Go-Pfad ist eine Liste von Verzeichnisbäumen, die Go-Quellcode enthalten. Es wird konsultiert, um Importe zu beheben, die nicht im Standard-Go-Baum gefunden werden können.

Wenn Sie go build getan haben, können Sie auch einen go install (kein custom.go) versuchen: Sie möchten das Paket installieren, nicht eine einzelne Datei.

35
VonC

Ich habe den GOBIN-Pfad festgelegt und das hat für mich funktioniert

export GOBIN=[WorkspacePath]/bin
53
Pratik Goenka

Als Anfänger bin ich auf diesen Fehler gestoßen, als ich verschiedene go-Befehle ausprobierte (build, run und install). Kurz gesagt, Sie können go nicht installieren a filename.go. Sie können nur ein Paket installieren.

Das war verwirrend, weil ich das gelernt hatte:

nate:~/work/src/dir $ go run hello/hello.go
hello, world.

funktioniert super. Aber ich konnte nicht herausfinden, warum install nicht funktioniert:

nate:~/work/src/dir $ go install hello/hello.go 
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
    /opt/go/src/hello (from $GOROOT)
    /home/ubuntu/work/src/hello (from $GOPATH)

Egal in welchem ​​Verzeichnis ich mich befand:

nate:~/work/src/dir $ cd hello
nate:~/work/src/dir/hello $ go install hello.go 
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir/hello $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
    /opt/go/src/hello (from $GOROOT)
    /home/ubuntu/work/src/hello (from $GOPATH)

Diese Verwirrung ist darauf zurückzuführen, dass go runnur mit Go-Quelldateien (Dateinamen, die auf .go enden) und go installnur Pakete verwendet. Pakete werden nach Importpfaden oder Dateisystempfad benannt. Somit:

nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .

alle arbeiten großartig. Ersteres bezieht sich auf das Paket nach Importpfad (da $ GOPATH = "/ home/nate/work" ist, suchen die Go-Tools nach Quellcode in/home/nate/work/src), die anderen werden als Dateisystem interpretiert Pfade wegen der führenden Perioden.

Siehe auch die GOPATH-Dokumente .

30
Nate Green

Tatsächlich gibt es zwei verschiedene Verhaltensweisen.

go install <package>

dies ist dokumentiert in Kompilieren und Installieren von Paketen und Abhängigkeiten Sie benötigen GOBIN nicht, wenn Sie GOPATH richtig einstellen.

go install <gofile>

dies ist nicht dokumentiert, und Sie benötigen in diesem Modus eine GOBIN-Umgebungsvariable.

10
PickBoy

Unter Windows mit Cygwin scheint es eine gute Idee zu sein, GOBIN auf $ GOPATH/bin einzustellen.

denken Sie daran, das Trennzeichen der Windows-Dateinamen ordnungsgemäß zu schützen:

$ echo $GOROOT
C:\Go\

[email protected] ~/gocode/src/github.com/user/hello
$ echo $GOPATH
C:\cygwin64\home\carl\gocode

[email protected] ~/gocode/src/github.com/user/hello
$ echo $GOBIN
C:\cygwin64\home\carl\gocode\bin
7
Carl Binding

Wie die durchgängigen Antworten gezeigt haben, müssen Sie die GOBIN-Umgebungsvariable nicht festlegen, wenn Ihre GOPATH-Umgebung korrekt auf Ihren Arbeitsbereich eingestellt ist.

Bitte überprüfen Sie Ihre go-Umgebungsvariablen, indem Sie $ go env | ausführen grep -i "^ GO" und halten Sie nach GOROOT und GOPATH Ausschau, um zu überprüfen, ob GOROOT auf Ihre GO-Quellinstallation und GOPATH auf Ihren Arbeitsbereich zeigt.

Wenn alles in Ordnung ist, navigieren Sie zu dem Unterverzeichnis, in dem sich yourpkg.go befindet, und führen Sie zuerst $ go build (ohne Dateinamen) und dann $ go install (erneut ohne Dateinamen) aus, wenn keine Fehlermeldung auf dem Bildschirm angezeigt wird Paket ist fertig in Ihrem Arbeitsbereich/pkg/youros /../ yourpackage.a 

5
user42754

Suchen Sie für *nix system, wo go installiert ist, und führen Sie den folgenden Befehl aus:

$ which go

welche Ausgabe lassen Sie uns sagen:

/usr/local/go/bin/go

fügen Sie dann folgende Einträge in ~/.bash_profile oder in ~/.zshrc hinzu:

export GOROOT=/usr/local/go
export GOPATH=$GOROOT/src //your-go-workspace
export GOBIN=$GOROOT/bin //where go-generate-executable-binaries

PATH=$PATH:$GOPATH:$GOBIN

export PATH

P.S: Vergiss nicht, ~/.bash_profile oder ~/.zshrc wie folgt zu quellen:

$ source ~/.bash_profile
3
Arpit

Sie benötigen $ GOBIN nicht, wenn Sie $ GOPATH richtig gesetzt haben. Wenn ja, überprüfen Sie einfach, ob sich Ihr Projekt im Ordner $ GOPATH/src befindet.

0
voogieJames

Von https://golang.org/cmd/go/#hdr-Environment_variables :

GOBIN Das Verzeichnis, in dem 'go install' einen Befehl installiert.

und https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :

Wenn die Umgebungsvariable GOBIN festgelegt ist, werden Befehle in dem von ihr angegebenen Verzeichnis anstelle von DIR/bin installiert. GOBIN muss ein absoluter Pfad sein.

und https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more

Im modulsensitiven Modus definiert GOPATH die Bedeutung von Importen während eines Builds nicht mehr, speichert jedoch weiterhin heruntergeladene Abhängigkeiten (in GOPATH/pkg/mod) und installierte Befehle (in GOPATH/bin, sofern GOBIN nicht festgelegt ist).

Grundsätzlich können Sie also GOBIN verwenden, um den Standardspeicherort für die binäre Installation (z. B. $GOPATH/bin) vorübergehend oder dauerhaft zu überschreiben. Ich hatte Erfolg bei der Installation eines 1-File-Go-Skripts mit env GOBIN=$HOME/bin/ go install testfile.go. Dies geschah mit go v1.11.

0
Benny Jobigan

In Bezug auf die Einstellung von GOBIN variablen Version ist dies nicht erforderlich und nur auf GOPATH angewiesen:

  1. GOBIN ist erforderlich, wenn wir kein Paket haben, d. h. die Datei befindet sich direkt im Verzeichnis GOPATH. Dies ist wahrscheinlich, wenn wir die Go-Funktionen als Lernende ausprobieren

  2. Bei typischen Go-Projekten befinden sich die Dateien in den Paketverzeichnissen. Für diese ist GOPATH gut genug.

  3. Mit anderen Worten, die beiden folgenden Lösungen funktionieren: ein. Setze GOBIN explizit als $ GOPATH/bin [nur für Lernzwecke, kann vermieden werden] b. Erstellen Sie ein Unterverzeichnis, das Ihrem Paketnamen entspricht, und verschieben Sie die .go-Dateien in dieses Verzeichnis 

  4. Ich denke, Go-Dienstprogramme sollten den obigen Fehler entfernen und das Szenario besser behandeln - basierend darauf, ob das Argument ein Verzeichnis oder eine Quelldatei ist

0