Wie setze ich die Umgebungsvariable GOPATH unter Ubuntu? Welche Datei muss ich bearbeiten?

258

Ich versuche ein go get:

go get github.com/go-sql-driver/mysql

und es schlägt mit dem folgenden Fehler fehl:

package github.com/go-sql-driver/mysql: cannot download, $GOPATH not set. For more details see: go help gopath

Wenn ich a mache go env, wird eine Liste von Go-Werten wie folgt angezeigt:

ubuntu@ip-xxx-x-xx-x:~$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"

klar ist der GOPATH nicht eingestellt, wie und wo stelle ich ihn ein?

Ich sehe viele Threads, die diesen Fehler erwähnen, aber keinen, der eine Antwort auf meine Frage liefert. Welche Datei muss bearbeitet werden, um einen Wert für diesen Pfad bereitzustellen?

David Saintloth
quelle
Welche Shell benutzt du?
Fuz
3
Zusätzlich zu den Antworten , wie es eingestellt werden soll, finden Sie in dieser SO-Antwort , in der klargestellt wird, was der GOPATH ist und wie er im Allgemeinen verwendet werden sollte
Louis Maddox
askubuntu.com/questions/4667/…
Ciro Santilli 法轮功 冠状 冠状 病 六四 事件 法轮功
Verwenden Sie GVM: github.com/moovweb/gvm
Ciro Santilli 法轮功 冠状 病 六四 事件 17
1
Hinweis: Go 1.8+ (Q2 2017) wird GOPATHfür Sie festgelegt: siehe meine Antwort unten .
VonC

Antworten:

284

Neuer Weg:

Schauen Sie sich diese Antwort an.

Alter Weg:

Fügen Sie einfach die folgenden Zeilen zu ~ / .bashrc hinzu, und dies bleibt bestehen. Sie können jedoch andere Pfade verwenden, die Sie als GOPATH anstelle von $ HOME / go in meinem Beispiel mögen .

export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Daniel Lin
quelle
14
Der Pfad war /usr/share/goauf meinem Ubuntu 13.10.
Tsusanka
35
Verwenden Sie NICHT / usr / share / go. GOPATH ist Go's "Arbeitsbereich", in dem Pakete usw. heruntergeladen werden. Erstellen Sie ein neues Verzeichnis und verwenden Sie dieses. Ich empfehle ~ / .go
Bryan Larsen
16
Wie in der Antwort von user2128535 angegeben, sollte GOROOT auf / usr / lib / go gesetzt werden
trungly
12
Denken Sie daran $ source ~/.bashrc;)
Eversor
65

Ubuntu 14.04

export GOPATH=$HOME/go

Zusätzlich können Sie diese Zeichenfolge zur Datei hinzufügen

$HOME/.bashrc
pasha.zhukov
quelle
1
Ihr Kommentar ist verwirrend, da er sich auf eine jetzt entfernte Zeile der ursprünglichen Antwort bezieht.
Marcel Burkhard
mkdir -p ~ / go / bin export GOPATH = ~ / go export PATH = $ PATH: $ GOPATH / bin:
Alex Punnen
61

GOPATH sollte auf ein neu erstelltes leeres Verzeichnis gesetzt werden. Dies ist der "Arbeitsbereich", in dem Pakete usw. heruntergeladen werden. Ich benutze ~ / .go.

Beispielsweise:

mkdir ~/.go
echo "GOPATH=$HOME/.go" >> ~/.bashrc
echo "export GOPATH" >> ~/.bashrc
echo "PATH=\$PATH:\$GOPATH/bin # Add GOPATH/bin to PATH for scripting" >> ~/.bashrc
source ~/.bashrc

Quelle: http://www.larry-price.com/blog/2013/12/15/setting-up-a-go-environment-in-ubuntu-12-dot-04/

Bryan Larsen
quelle
1
Vielen Dank
Dylan B
35

Neuer Weg: Go Module

Seit Go 1.11 müssen Sie GOPATH nicht mehr verwenden. Gehen Sie einfach in Ihr Projektverzeichnis und machen Sie dies einmal:

go mod init github.com/youruser/yourrepo
  • Damit erstellt Go ein Modulstammverzeichnis in diesem Verzeichnis.
  • Sie können beliebig viele Module erstellen.
  • Eine schrittweise Anleitung finden Sie auch in dieser Antwort .

Alter Weg: GOPATH

Wenn Sie darauf bestehen, mit GOPATH zu arbeiten, beachten Sie Folgendes:

  • Seit Go 1.8 müssen Sie weder GOPATH noch GOROOT einstellen.
  • GOPATH befindet sich standardmäßig in Ihrem Benutzer- / Home-Verzeichnis.

Aus der Dokumentation :

Wenn kein GOPATH festgelegt ist, wird auf Unix-Systemen $ HOME / go und unter Windows% USERPROFILE% \ go angenommen. Wenn Sie einen benutzerdefinierten Speicherort als Arbeitsbereich verwenden möchten, können Sie die Umgebungsvariable GOPATH festlegen.

Inanc Gumus
quelle
34

Wenn es sich zum Beispiel nach der Installation der Pakete um ein Ubuntu handelt:

$sudo apt install golang -y

Fügen Sie einfach die folgenden Zeilen zu ~ / .bashrc (Ihres Benutzers) hinzu.

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
firebitsbr
quelle
19
export GOPATH=/path/desired/here

Es ist nicht erforderlich, eine Datei zu bearbeiten. Sie können einfach den obigen Befehl verwenden, um die Go-Umgebungsvariablen direkt zu bearbeiten.

David Saintloth
quelle
11
Dies ist jedoch nicht dauerhaft. Wenn Sie möchten, dass diese Option erhalten bleibt, müssen Sie sie wahrscheinlich zu einer Datei hinzufügen, die beim Anmelden geladen wird.
Cubic
1
Vielen Dank! Was die meisten Benutzer nie denken, ist, dass es Leute gibt, die mit Linux beginnen, und wenn es keine Dokumentation gibt, die sagt, was Sie gesagt haben (weil jeder denkt, dass es eine bekannte Tatsache ist), wie würden wir die Informationen lernen / finden?
PlayHardGoPro
19

Schreiben Sie diesen Code in Terminal.

export GOPATH=path/to/your/gopath/directory

Hinweis : Dies wird bei jedem neuen Terminalfenster oder Systemneustart zurückgesetzt.

Um dauerhaft zu sein, fügen Sie den folgenden Code entsprechend Ihrer Shell in Ihre .zshrcoder .bashrc-Datei ein. Diese Dateien in Ihrem Home-Verzeichnis . Es wird wie unten sein.

export PATH=path/to/some/other/place/composer/for/example
export GOPATH=path/to/your/gopath/directory
export PATH=$PATH:$GOPATH/bin
atilkan
quelle
11

Sie werden GOPATH auch später brauchen. Also füge es hinzu ~/.bashrc.

Vytautas Shaltenis
quelle
10
Ja, ich hatte das im Sinn, aber die Möglichkeit, dass ein Typ eine Ubuntu-Box mit einer benutzerdefinierten Shell haben würde, wurde abgelehnt und es nicht als höchst unwahrscheinlich eingestuft :-)
Vytautas Shaltenis
9

Wenn Sie etwas eingerichtet haben, das geändert werden muss, z. B. Java, Go usw., ist dies sehr vertraut.

Ich gehe davon aus, dass Sie irgendwo die folgende Verzeichnisstruktur als Go-Pfad haben:

\---[folder name]
    +---bin
    +---pkg
    \---src
  • Öffnen Sie ein neues Terminal
  • Art sudo nano /etc/environment
  • Finde PATH=...und gehe das Ende davon und füge :nach dem letzten Pfad einen Doppelpunkt hinzu, dann füge dein vollständiges go pathz/home/user/gocode

und Sie sind fertig. Dies sollte es durch das System dauerhaft machen.

ymg
quelle
1
Ich verstehe nicht, warum $ PATH geändert wird, wenn go für David funktioniert. Er muss $ GOPATH setzen (siehe die Antwort von Daniel Lin). David kann beide Ansätze zusammenführen (oder in / etc / profile oder $ HOME / .profile festlegen). Übrigens empfehle ich David, diese Links zu lesen: golang.org/doc/install und golang.org/doc/code.html#GOPATH
zk82
2
@ zk82 $ GOPATH ist eine Umgebungsvariable, und ich verstehe nicht, warum das Bearbeiten Ihrer Umgebungsvariablen, um diese Variable hinzuzufügen, ein Problem darstellt. Gleiches gilt für $ JAVA_HOME und andere Frameworks, die eine solche Konfiguration erfordern.
Ymg
OK, ich verstehe. Vielen Dank für Ihren Kommentar.
zk82
3

Dies ist, was es für mich unter Ubuntu 15.10 mit folgenden Funktionen zum Laufen gebracht hatfish shell :

# ~/.config/fish/config.fish

set -g -x PATH /usr/local/bin $PATH
set -g -x GOPATH /usr/share/go

Dann musste ich die Berechtigungen für den goOrdner ändern (er wurde auf root gesetzt)

sudo chown <name>:<name> -R /usr/share/go
Tom
quelle
3

go path kann jeder Ort sein, an dem Sie einfach ein Verzeichnis erstellen und eine globale Pfadvariable im Namen von GOPATH für Ihre Umgebung festlegen möchten.

mkdir ~/go
export GOPATH=~/go
go get github.com/go-sql-driver/mysql
Jeyem
quelle
2

Mit Go 1.8 (2. Quartal 2017) müssen Sie keine Datei bearbeiten, wenn Sie den GOPATHfür Sie festgelegten Standardwert akzeptieren.

$HOME/go

Sie können die Kommentare zu Ausgabe 17262 und die dazugehörige Twitter-Abstimmung sehen :

Durch Auswahl eines Standards GOPATHkönnen wir unsere Dokumentation vereinfachen, da wir Dinge wie sagen können

$ go get github.com/foo/bar

wird das github.com/foo/barRepo in überprüfen $HOME/go/src/github.com/foo/bar.

Wir müssen Neulinge nicht davon ablenken, eine env-Variable festlegen zu müssen. Wir müssen lediglich eine kleine Anmerkung in Klammern am Ende der Seite einfügen

$HOME/goist der Standardpfad zu Ihrem Go-Arbeitsbereich.
Wenn Sie diesen Pfad ändern möchten, setzen Sie die GOPATHVariable auf etwas Ihrer Wahl.

VonC
quelle
2

Meine Go-Umgebung sah Ihrer ähnlich.

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

Ich habe es gelöst, indem ich GOPATH auf / usr / lib / go gesetzt habe . Versuch es.

export GOPATH=/usr/lib/go
export PATH=$PATH:$GOPATH/bin
NSP
quelle
Ich habe irgendwo gelesen, dass es eine schlechte Idee ist, GOPATH als das gleiche wie das Installationsverzeichnis festzulegen. Oo
ankush981
2

GOPATH ist eine Umgebungsvariable für Ihren Arbeitsplatz. GOROOT ist eine Umgebungsvariable für Ihr Installationsverzeichnis. Obwohl GOROOT und GOPATH während der Installationszeit automatisch festgelegt werden (falls es keinen Fehler geben würde), können Sie den folgenden Vorgang ausführen , um ihn manuell anzugeben. Weitere Informationen finden Sie auf der Wiki-Seite von GO .

Es ist besser, GOPATH auf ein Verzeichnis in Ihrem Home-Verzeichnis festzulegen , z. B. $ HOME / go,% USERPROFILE% \ go (Windows).

  1. Dies ist ein Lösungs-Mac, der unter macOS Sierra, ver. 10.12 und auch in Gogland-EAP, das von JetBrains als IDE für Go-Programmierung eingeführt wurde.

Auf Ihrem Terminaltyp

vim ~/.profile

Drücken Sie im geöffneten Dokument auf dem Terminal i und fügen Sie den folgenden Pfad hinzu

GOPATH=/path/to/a/directory/inside/home/directory
GOROOT=/path/to/you/go/library
PATH=$PATH:$GOPATH:$GOROOT:$GOROOT/bin

Drücken Sie ESC und geben Sie Folgendes ein : x . Zuletzt sollten Sie Ihr Terminal neu starten ( schließen und öffnen ) oder sich erneut abmelden und anmelden .

  1. Informationen zur Windows- und Linux-Konfiguration finden Sie auf der Go-Wiki-Seite von Githab unter Einstellen von GOPATH-Golang .

VORSICHT nicht beide gesetzt GOROOT und GOPATH in das gleiche Verzeichnis, sonst erhalten Sie eine Warnung erhalten.

Esmaeil MIRZAEE
quelle
2
export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin

Und vielleicht möchten Sie nach $ go env suchen

Mei
quelle
2

(Ubuntu)

Wenn Sie keinen GOPATH festlegen, wird der Standardwert verwendet.

Sie müssen Ihrem PATH $ GOPATH / bin hinzufügen, um eine in $ GOPATH / bin installierte Binärdatei auszuführen, oder Sie müssen $ GOPATH / bin / the-command eingeben. Fügen Sie dies Ihrem ~ / .bash_profile hinzu

export PATH=$GOPATH/bin:$PATH

Aktueller GOPATH-Befehl:

go env GOPATH

Ändern des GOPATH-Befehls:

export GOPATH=$HOME/your-desired-path

Shubham Jaiswal
quelle
0

Dies war die nervigste Sache, mit der man sich befassen musste. In der Hoffnung, Ihre Zeit zu sparen.

IF go wurde als Root-Benutzer installiert. Dem Root-Benutzer der bash_profile-Textdatei ~ / .bash_profile Ihres Systems muss $ GOROOT dem Verzeichnis go install und $ GOPATH dem Verzeichnis go / src zugewiesen sein.

  ...$# sudo su
  ...$# vi ~/.bash_profile

    ***Story continues in vi editor***

    GOROOT=$GOROOT:/usr/local/go
    GOPATH=$GOPATH:/usr/local/go/src
    ...
    [your regular PATH stuff here]
    ...

Stellen Sie sicher, dass sich der Pfad für die Binärdatei in Ihrem Pfad auf .bash_profile befindet

PATH = $ PATH: $ HOME / bin: / usr / local / bin: / usr / local / go / bin

Dieser Pfad kann so lang sein, wie er sein muss. Um neue Elemente hinzuzufügen, die nur durch Doppelpunkte getrennt sind:

Beenden Sie den vi-Editor und speichern Sie das Bash-Profil (: wq steht für Schreiben und Beenden)

  [esc] 
  [shift] + [:] 
  :wq

Sie müssen sich vom Terminal abmelden und erneut anmelden, damit das Profil erneut gestartet werden kann. Sie können es auch einfach mithilfe des Exports starten.

...$# export GOPATH=/usr/local/go/src

Sie können go env überprüfen:

...$# go env

Yay!

GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/usr/local/go/src"
GORACE=""
GOROOT="/usr/local/go"

Jetzt können Sie sudo and go Verzeichnisse in go / src herunterladen und erstellen und zu dem gelangen, was Sie versucht haben.

Beispiel

# sudo go get github.com/..

Jetzt wirst du auf ein anderes Problem stoßen. Vielleicht hast du Git nicht installiert. Das ist ein weiteres Abenteuer. :)

user3151532
quelle
Tu das nicht. Sie nicht wollen Dinge als root kompilieren und Sie nicht wollen , go getetwas setzen irgendwo in der Nähe GOROOT.
Dave C
Wie läuft ein Lauf unter einem normalen Benutzer ab? Vielen Dank. Während des Installationsprozesses funktionierten die Dinge nicht und ich benutzte schließlich eine virtuelle Testmaschine, um GO auszuprobieren.
user3151532
0

Auf meinem Fedora 20-Computer habe ich meinem ~ / .bashrc die folgenden Zeilen hinzugefügt:

export GOROOT=/usr/lib/golang
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Raubvogel
quelle
3
Nicht einstellenGOROOT . (Es sei denn, Sie befinden sich in einer extrem kleinen Gruppe von Personen, die eine Binärdistribution von Go verwenden, diese jedoch an einem nicht standardmäßigen Ort installieren.)
Dave C
0

Noch eine andere Lösung: Exportieren Sie jede GO*Umgebungsvariable ausgo env

.bashrc:

eval $(go env | grep '^GO[A-Z0-9_]*=' | while read setenv; do
  echo "export $setenv; "
done 2> /dev/null)

[[ -n $GOPATH ]] || export GOPATH="$HOME/go/bin"
[[ -n $GOROOT ]] || export GOROOT=/usr/bin/go
export PATH="$PATH:$GOPATH/bin:$GOROOT/bin"
DMaster
quelle
1
evalist in der Regel eine schlechte Idee und ein Overkill in dieser Situation IMHO
Paweł Prażak
@ PawełPrażak Warum? (Ich bin kein Experte in Shell-Skript)
DMaster
1
Wenn die Bewertung einen Fehler enthält, können die Folgen schmerzhaft sein. hier war die Frage, wie man GOPATHnur exportiert
Paweł Prażak
0

Bearbeiten Sie Ihre ~/.bash_profile, um die folgende Zeile hinzuzufügen:

$ export GOPATH=$HOME/work

Speichern Sie Ihren Editor und beenden Sie ihn. Dann beschaffen Sie Ihre~/.bash_profile

$ source ~/.bash_profile

Hinweis: Legen Sie den GOBIN-Pfad fest, um eine Binärdatei zu generieren, wenn go install ausgeführt wird

$ export GOBIN=$HOME/work/bin
Schakal
quelle
-1

Wie in der geschrieben offiziellen Anleitung geschrieben :

Die Umgebungsvariable GOPATH gibt den Speicherort Ihres Arbeitsbereichs an. Der Standardwert ist ein Verzeichnis mit dem Namen go in Ihrem Home-Verzeichnis, also $ HOME / go unter Unix, $ home / go unter Plan 9 und% USERPROFILE% \ go (normalerweise C: \ Users \ YourName \ go) unter Windows. Wenn Sie an einem anderen Ort arbeiten möchten, müssen Sie GOPATH auf den Pfad zu diesem Verzeichnis setzen. (Ein weiteres gängiges Setup ist das Setzen von GOPATH = $ HOME.) Beachten Sie, dass GOPATH nicht derselbe Pfad wie Ihre Go-Installation sein darf.

Wenn Sie beispielsweise in Jetbrains Webstorm (mit dem Go-Plugin ) codieren , möchten Sie möglicherweise festlegenGOPATH , dass /Users/<user>/WebstormProjects.

Stellen Sie es in einfacheren Worten auf den Ort ein, an dem sich Ihre Go-Projekte befinden sollen.

Abdul Wasae
quelle
-1

Sie können die "Export" -Lösung genau so verwenden, wie es andere vorgeschlagen haben. Ich möchte Ihnen eine weitere Lösung zur dauerhaften Bequemlichkeit anbieten: Sie können einen beliebigen Pfad als GOPATH verwenden, wenn Sie Go-Befehle ausführen.

Zunächst müssen Sie den Namen ein kleines Tool zum Download gost: https://github.com/byte16/gost/releases . Wenn Sie Ubuntu verwenden, können Sie die Linux-Version herunterladen ( https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz ).

Dann müssen Sie die folgenden Befehle ausführen, um es zu entpacken:

$ cd /path/to/your/download/directory 
$ tar -xvf gost_linux_amd64.tar.gz

Sie würden eine ausführbare Datei erhalten gost. Sie können es zur /usr/local/binbequemen Verwendung verschieben:

$ sudo mv gost /usr/local/bin

Führen Sie den folgenden Befehl aus, um den Pfad, den Sie als GOPATH verwenden möchten, in den Pfad hinzuzufügen, der verwaltetgost wird. Es ist erforderlich, dem Pfad einen Namen zu geben, den Sie später verwenden würden.

$ gost add foo /home/foobar/bar     # 'foo' is the name and '/home/foobar/bar' is the path

Führen Sie einen beliebigen Go-Befehl im folgenden Format aus:

gost goCommand [-p {pathName}] -- [goFlags...] [goArgs...]

Zum Beispiel wollen Sie laufen go get github.com/go-sql-driver/mysqlmit /home/foobar/barals GOPATH, tun Sie es einfach wie folgt:

$ gost get -p foo -- github.com/go-sql-driver/mysql  # 'foo' is the name you give to the path above.

Es würde Ihnen helfen, den GOPATH festzulegen und den Befehl auszuführen. Aber denken Sie daran , dass Sie den Weg in hinzugefügt haben gost‚s pathspace . Wenn Sie sich in einer beliebigen Ebene von Unterverzeichnissen von befinden /home/foobar/bar, können Sie sogar einfach den folgenden Befehl ausführen, der kurz dasselbe tun würde:

$ gost get -- github.com/go-sql-driver/mysql

gostist ein einfaches Go-Tool, mit dem Sie GOPATHs verwalten und Go-Befehle ausführen können. Weitere Informationen zur Verwendung anderer Go-Befehle finden Sie einfach gost help goCmdName. Wenn Sie beispielsweise mehr darüber erfahren möchten install, geben Sie einfach die folgenden Wörter ein in:

$ gost help install

Weitere Details finden Sie auch in der README-Datei des Projekts: https://github.com/byte16/gost/blob/master/README.md

Franco
quelle
-1

Sie müssen den PFAD basierend auf dem von Ihnen verwendeten Terminal (bash oder zsh) aktualisieren.

  1. Öffnen Sie die Shell-Skriptdatei des Terminals, dh ~/.bashrcoder ~/.zshrcin einem Editor
   vi ~/.zshrc
      (or)
   code ~/.zshrc
  1. Aktualisieren Sie den folgenden GOPATH, falls er bereits gefunden wurde, oder fügen Sie die folgende Zeile hinzu.

export GOPATH=$HOME/go:/$HOME/projects/go

Hier können Sie :der GOPATHUmgebungsvariablen einen oder mehrere Pfade hinzufügen, die durch ein Semikolon von verschiedenen Positionen Ihrer GO-Projekte auf dem System getrennt sind/path/1:path/2:path/3 .

In meinem Fall habe ich wie oben gezeigt zwei Pfade hinzugefügt, einen aus dem Stammverzeichnis $HOME/gound einen aus dem Projektverzeichnis:/$HOME/projects/go

Sudharshan
quelle