Was sollten die Werte von GOPATH und GOROOT sein?

322

Ich versuche Doozer wie folgt zu installieren :

$ goinstall github.com/ha/doozer

Ich bekomme diese Fehler.

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally
jshen
quelle
3
@Motin der obige Link ist nicht mehr gültig
Jorrit Reedijk
Die Datei wurde für das Projekt veraltet. Ein verwandtes Problem im Zusammenhang mit OSX finden Sie hier: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin
Hinweis: Standardmäßig GOPATHwird für Sie in Go 1.8 (2017) festgelegt. Siehe meine Antwort unten
VonC
Ja, ich fand das auch verwirrend, wie die Godocs organisiert sind. Dies half: albertech.blogspot.com/2017/01/…
jar
1
@BenyaminJafari, weil goinstalles wirklich uralt vor Go1 ist und seit 2012 nicht mehr existiert.
Dave C

Antworten:

310

GOPATHwird in der cmd/goDokumentation besprochen :

Die GOPATHUmgebungsvariable listet Orte auf, an denen nach Go-Code gesucht werden soll. Unter Unix ist der Wert eine durch Doppelpunkte getrennte Zeichenfolge. Unter Windows ist der Wert eine durch Semikolons getrennte Zeichenfolge. In Plan 9 ist der Wert eine Liste.

GOPATH muss so eingestellt sein, dass Pakete außerhalb des Standard-Go-Baums abgerufen, erstellt und installiert werden.

GOROOTwird in der Installationsanleitung beschrieben :

Die Go-Binärdistributionen gehen davon aus, dass sie unter /usr/local/go(oder c:\Gounter Windows) installiert werden. Es ist jedoch möglich, die Go-Tools an einem anderen Speicherort zu installieren. In diesem Fall müssen Sie die GOROOTUmgebungsvariable so einstellen , dass sie auf das Verzeichnis verweist, in dem sie installiert wurde.

Wenn Sie beispielsweise "Gehe zu deinem Ausgangsverzeichnis" installiert haben, sollten Sie die folgenden Befehle hinzufügen $HOME/.profile:

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

Hinweis: GOROOT Muss nur bei der Installation an einem benutzerdefinierten Speicherort festgelegt werden.

(aktualisierte Version von Chris Bunchs Antwort .)

pje
quelle
44
Viel umfassendere Informationen zu GOPATH finden Sie unter Schreiben von Go-Code. Ein Verständnis der dortigen Informationen ist erforderlich, um den goBefehl zu verstehen , der für die Arbeit mit Go unerlässlich ist. Zum Beispiel sollte die Verwendung goinstallim OP jetzt sein go get.
Sonia
13
Beachten Sie auch den tatsächlichen Installationspfad von go. In einem Standard-Homebrew-Setup installiert Homebrew beispielsweise go in /usr/local/Cellar/go/. In diesem Fall sollte der Exportpfad mit export GOROOT=/usr/local/Cellar/go/{version}und festgelegt werden export PATH=$PATH:$GOROOT/bin.
Ekillaby
10
Ich musste tun export GOROOT=/usr/local/Cellar/go/1.2/libexec/, um meine mit Brauen arbeiten zu lassen.
Steven Soroka
Ich kann diese Bearbeitung nicht vorschlagen, da sich die App beschwert, dass meine Bearbeitung unformatierten Code zu enthalten scheint (was nicht der Fall ist; vielen Dank SO), aber:
Wildcard
Wenn GOROOT ab Go 1.10 deaktiviert ist, versucht das Go-Tool, dies anhand seiner eigenen Position herauszufinden. Ich kann den Link auch nicht einfügen, da das Einfügen in der iOS-App von Stack Exchange nicht funktioniert. Im Moment sehr frustriert.
Wildcard
97

Hier ist meine einfache Einrichtung:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

GOROOT, GOPATH, PATH sind wie folgt eingestellt:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Kurz gesagt:

GOROOT ist für Compiler / Tools gedacht, die von Anfang an installiert werden.
GOPATH ist für Ihre eigenen Go-Projekte / Bibliotheken von Drittanbietern (heruntergeladen mit "go get").

EvgenijM86
quelle
Ich denke, diese Antwort ist leichter zu verstehen, da es eine Zuordnung zur Ordnerstruktur gibt.
H-Rai
Enthält GOPATH ganze Projektbäume (z. B. Git) mit Non-Go-Dateien - z. B. Bilder, Skripte, Build-Dateien usw.?
Serge Merzliakov
52

Erster Lauf go env.
Wenn Sie feststellen, dass das Go nicht installiert ist, können Sie es über homebrewoder über ein Paket und / oder auf andere Weise installieren .
Wenn Sie eine Ausgabe sehen, ist Ihre Goinstalliert.
Es zeigt Ihnen alle Envs, die gesetzt sind und nicht.

Wenn Sie leer sehen für GOROOT:

  1. Führen Sie which go(Auf meinem Computer: /usr/local/go/bin/go)
  2. dann so exportieren export GOROOT=/usr/local/go

Wenn Sie leer sehen für GOPATH:

  1. Erstellen Sie in meinem Fall ein beliebiges Verzeichnis auf Ihrem Computer für Go-Projekte: ~/GO_PROJECTS
  2. Dann export GOPATH=~/GO_PROJECTS
РАВИ
quelle
2
which gohabe es für mich getan. Es wurde ein anderer go-Installationsort aus einer früheren Installation mit Chocolatey verwendet. Löschte diesen Ordner und entfernte ihn aus der PATH-Variablen. Jetzt funktioniert es. Vielen Dank!
Sgarg
which goBefehl funktionierte nicht für mich in Windows 7. Wie finde ich, wo ich diesen Befehl
ausführen soll
Der entsprechende Windows-Befehl where gozeigt Ihnen den Pfad der ausgeführten Datei
Falco
export GOPATH=~/GO_PROJECTShat Arbeit gemacht
Thamaraiselvam
39

GOPATHwird hier diskutiert :

Die GOPATHUmgebungsvariable

GOPATH kann auf eine durch Doppelpunkte getrennte Liste von Pfaden gesetzt werden, in denen sich Go-Code, Paketobjekte und ausführbare Dateien befinden können.

GOPATHLegen Sie a fest , um goinstall zu verwenden, um Ihren eigenen Code und externe Bibliotheken außerhalb des Go-Baums zu erstellen und zu installieren (und um das Schreiben von Makefiles zu vermeiden).

Und GOROOTwird hier diskutiert :

$GOROOTOft die Wurzel des Go-Baums $HOME/go. Dies ist standardmäßig das übergeordnete Verzeichnis des Verzeichnisses, in dem all.bashes ausgeführt wird. Wenn Sie nicht festlegen $GOROOTmöchten, müssen Sie gomake anstelle von make oder gmake ausführen, wenn Sie Go-Programme mit den herkömmlichen Makefiles entwickeln.

Chris Bunch
quelle
Wenn ich also unter ~ / projects / go installiert bin, wie sollten die Werte der Variablen lauten, um os, fmt usw. zu finden?
jshen
2
Wo installiert sich Go, wenn Sie sudo apt-get install golang?
weberc2
9
@ weberc2 wenn Sie laufen go env, sollten Sie diese Informationen sehen, für mich war es/usr/lib/go/
Andre
19

Ich habe die go help gopathDokumente gelesen und war immer noch unglaublich verwirrt, habe aber dieses kleine Nugget von einer anderen Go-Doc-Seite gefunden:

Die Umgebungsvariable GOPATH gibt den Speicherort Ihres Arbeitsbereichs an. Dies ist wahrscheinlich die einzige Umgebungsvariable, die Sie bei der Entwicklung von Go-Code festlegen müssen.

http://golang.org/doc/code.html#GOPATH

Max
quelle
10

Der GOPATH sollte nicht auf die Go-Installation verweisen, sondern auf Ihren Arbeitsbereich (siehe https://golang.org/doc/code.html#GOPATH ). Immer wenn Sie ein Paket mit go get oder go install installieren, landet es im GOPATH. Deshalb warnt es Sie, dass Sie definitiv nicht möchten, dass zufällige Pakete aus dem Internet in Ihre offizielle Installation kopiert werden.

Arganzheng
quelle
9

Ab go 1.8 (Q2 2017) wird GOPATH für Sie standardmäßig auf $ HOME / go gesetzt

Siehe Ausgabe 17262 und Rob Pikes Kommentar:

$HOME/goes wird sein.
Es gibt keine einzige beste Antwort, aber diese ist kurz und bündig, und es kann nur ein Problem sein, diesen Namen zu wählen, wenn er $HOME/gobereits vorhanden ist. Dies freut nur Experten, die bereits installiert sind und verstehen GOPATH.

VonC
quelle
Wie kann ein so einfaches Thema so komplex werden! Danke für die beste Antwort hier.
dodgy_coder
@dodgy_coder Eigentlich ... sieh dir die ersten beiden Zeilen meiner anderen Antwort an: stackoverflow.com/a/37905102/6309 ;) Das könnte noch einfacher werden: überhaupt kein GOPATH mehr! Weitere Informationen finden Sie unter stackoverflow.com/a/48914523/6309 .
VonC
Ja, ich stimme zu, GOPATH ist nicht wirklich erforderlich, wenn Sie die Standardeinstellung verwenden. Ist das richtig? Ich musste es trotzdem einstellen, da es für die Entwicklungsumgebung von Google App Engine (Go Standard) erforderlich war. Sie sagen dir tatsächlich, dass du den GOPATH setzen sollst, aber sagst dir nicht, auf welchen Wert du ihn setzen sollst ..!
dodgy_coder
@dodgy_coder Ja, standardmäßig sucht Go nach dem Projekt PATH in einem festgelegten vorgegebenen Wert.
VonC
6

Wie oben erwähnt:

Die Umgebungsvariable GOPATH gibt den Speicherort Ihres Arbeitsbereichs an.

Für Windows hat dies bei mir funktioniert (im Ms-dos-Fenster):

set GOPATH=D:\my_folder_for_go_code\

Dadurch wird eine GOPATH-Variable erstellt, die Ms-dos bei folgender Verwendung erkennt:

cd %GOPATH%
Timothée HENRY
quelle
3

Insbesondere GOROOTsetzt Go 1.9 es automatisch auf seinen Installationspfad.
Auch wenn Sie mehrere Go installiert haben, stellen Sie den 1.9.x ein Aufruf GOROOTan /path/to/go/1.9(vor, wenn nicht gesetzt, vorausgesetzt es einen Standardpfad wie /usr/local/gooder c:\Go).

Siehe CL Go Review 53370 :

Der go toolwird nun den Pfad verwenden, von dem aus er aufgerufen wurde, um zu versuchen, das Stammverzeichnis des Go-Installationsbaums zu finden .
Dies bedeutet, dass die gesamte Go-Installation go toolwie gewohnt weiterarbeiten sollte , wenn sie an einen neuen Speicherort verschoben wird .

Dies kann durch Einstellen GOROOTin der Umgebung außer Kraft gesetzt werden , was nur unter ungewöhnlichen Umständen erfolgen sollte.
Beachten Sie, dass dies keinen Einfluss auf das Ergebnis der runtime.GOROOT()Funktion hat , die weiterhin den ursprünglichen Installationsort meldet. Dies kann in späteren Versionen behoben werden.

VonC
quelle
0

Ab 2020 und Go Version 1.13+ können Sie unter Windows GOPATH am besten aktualisieren, indem Sie einfach die Eingabeaufforderung eingeben:

setx GOPATH C:\mynewgopath
Farshid
quelle
0

Hier ist eine Lösung (Einzelbenutzer):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

gowenn Sie beschwert sich ändern .gopathzu .go.

Ich wünschte, sie würden so weitermachen wie die rust/cargoJungs und einfach alles an einem Ort platzieren.

Scherben
quelle
-1

In OSX habe ich mit Brew installiert. Hier ist die Einstellung, die für mich funktioniert

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"
Edwin Ikechukwu Okonkwo
quelle
-1

Ich musste anhängen

export GOROOT=/usr/local/Cellar/go/1.10.1/libexec

zu meinem ~ / .bash_profile unter Mac OS X.

Shammi Shailaj
quelle
-1

Es gibt auch einen Fall, in dem bei Verwendung von go alle go-Dateien kompiliert werden.

So können sagen , wir hatten eine Datei main.go und später haben wir die aktuelle Datei main_old.go und dann unsere neue hinzugefügt main.go Datei. Wenn wir dann unsere App erstellen, werden alle go-Dateien kompiliert. Der Fehler, der auftritt, ist möglicherweise auf einen Kompilierungsfehler in einigen anderen go-Dateien zurückzuführen.

Jino Jossy
quelle
-1

Nach der Installation von Go lang ist GOROOT das Stammverzeichnis der Installation.

Als ich die Go Lang-Binärdatei im Windows C: \ -Verzeichnis explodierte, sollte mein GOROOT C: \ go sein. Bei der Installation mit dem Windows-Installationsprogramm kann es sich bei 64-Bit-Paketen um C: \ Programme \ go (oder C: \ Programme (x86) \ go) handeln.

 GOROOT = C:\go

während mein GOPATH der Speicherort des Go lang-Quellcodes oder des Arbeitsbereichs ist.

Wenn sich mein Go lang-Quellcode unter C: \ Users \\ GO_Workspace befindet, lautet Ihr GOPATH wie folgt:

 GOPATH = C:\Users\<xyz>\GO_Workspace
Amit Kaneria
quelle
-1

Sie müssen nicht explizit festlegen GOROOT(moderne Versionen von Go können dies anhand des Speicherorts der von Ihnen ausgeführten go-Binärdatei selbst herausfinden).

Beim Versuch, mit zu arbeiten, wurde außerdem der folgende Fehler angezeigt vgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

GOROOT entfernen, meinen GOPATH aktualisieren und export GO111MODULE="on"das Problem beheben .

GOPATH siehe hier

GOPATH kann auf eine durch Doppelpunkte getrennte Liste von Pfaden festgelegt werden, in denen sich Go-Code, Paketobjekte und ausführbare Dateien befinden können.

Legen Sie einen GOPATH fest, der goinstall verwendet, um Ihren eigenen Code und externe Bibliotheken außerhalb des Go-Baums zu erstellen und zu installieren (und um das Schreiben von Makefiles zu vermeiden).

Effi Bar-She'an
quelle
-2

Die Werte sollten (MACOS) sein:

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)
Diego Santa Cruz Mendezú
quelle
-3

Wenn Sie die Distribution go verwenden, sollten Sie darauf verweisen, wo sich die Include-Dateien befinden, zum Beispiel:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(Dies ist für Fedora 20)

Breno Leitão
quelle