kann nicht heruntergeladen werden, $ GOPATH nicht gesetzt

150

Ich möchte json2csv mit installieren, erhalte go get github.com/jehiah/json2csvaber folgende Fehlermeldung:

package github.com/jehiah/json2csv: cannot download, $GOPATH not set. For more details see: go help go path

Hilfe zur Behebung dieses Problems unter MacOS?

Mona Jalal
quelle
3
Ich habe das gleiche Problem mit einem anderen Paket (Welpe). Komm schon, Betreuer, bitte erstelle ein (OS X) Installationsprogramm, das den Job beendet! Das OS X-Installationsprogramm für Node ist ein gutes Beispiel. Die Verwendung von Node erfordert keine zusätzlichen manuellen Installationsschritte. Es funktioniert einfach. Ich hoffe, dass zukünftige Versionen des Go-Installationsprogramms besser sind.
Jwfearn

Antworten:

140

[Update: ab Go 1.8 GOPATHstandardmäßig $HOME/go, aber Sie können dies dennoch nützlich finden, wenn Sie das GOPATHLayout verstehen , anpassen usw. möchten .]

Auf der offiziellen Go-Website werden GOPATH und das Erstellen eines Arbeitsbereichsverzeichnisses erläutert .

export GOPATH="$HOME/your-workspace-dir/"- Führen Sie es in Ihrer Shell aus und fügen Sie es dann zu ~/.bashrcoder einem gleichwertigen hinzu, damit es in Zukunft für Sie festgelegt wird. Go wird Pakete unter installieren src/, bin/und pkg/, Verzeichnisse gibt. Sie möchten Ihre eigenen Pakete irgendwo unter ablegen $GOPATH/src, z. B. $GOPATH/src/github.com/myusername/wenn Sie auf GitHub veröffentlichen möchten. Sie werden wahrscheinlich auch export PATH=$PATH:$GOPATH/binin Ihrem wollen, .bashrcdamit Sie kompilierte Programme unter ausführen können $GOPATH.

Optional kann über Rob Pike , können Sie auch festlegen , CDPATHso ist es schneller zu cddirs in bash zu verpacken: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xMittel Sie nur eingeben können , cd net/htmlstatt cd $GOPATH/src/golang.org/x/net/html.

Keith Rarick stellt fest , die Sie einstellen können GOPATH=$HOMEGos setzen src/, pkg/und bin/Verzeichnisse direkt unter Ihrem Home - Verzeichnis. Das kann nett sein (zum Beispiel, das Sie vielleicht schon $HOME/binauf Ihrem Weg haben), aber natürlich verwenden einige Leute mehrere Arbeitsbereiche usw.

zwei
quelle
Danke für die Information. Müssen Sie Ihren Arbeitsbereich für jedes einzelne Projekt ändern?
Doug Molineux
1
Im Allgemeinen können Sie einen Arbeitsbereich verwenden, src/der zB github.com/youruser/xund enthält github.com/youruser/y. Das ist, was ich tue. Die Leute haben vielleicht ihre Gründe, etwas anderes zu tun (Unternehmensrichtlinien, um Projekte auseinander zu halten?), Aber ich kann nicht mit ihnen sprechen.
Zwei
3
$ GOPATH ist gesetzt, aber "kann nicht heruntergeladen werden, $ GOPATH ist nicht gesetzt. Weitere Details finden Sie unter: go help gopath" wird trotzdem angezeigt.
Tyguy7
Welche Plattform (Windows oder Linux / OS X / anderes Unix)? Wenn nicht Windows, was echo $GOPATHsagt das aus? Es könnte sich lohnen, eine separate Frage zu stellen. Es hört sich so an, als ob Sie sich in einer ungewöhnlichen Situation befinden, und das Debuggen dieser Kommentare kann schwierig sein.
Zweiundzwanzig
2
@ Tyguy7 wahrscheinlich hast du es nicht getan export; Ausführen /bin/bash -c "echo \$GOPATH", um zu überprüfen, ob Unterprozesse sehen können $GOPATH. Wenn es leer export GOPATHgo get ...
hallt
33

Mit Gebräu

Ich habe es mit installiert brew.

$ brew install go

Wenn Sie diesen Brühbefehl ausführen, werden die folgenden Informationen angezeigt:

$ brew info go
go: stable 1.4.2 (bottled), HEAD
Go programming environment
https://golang.org
/usr/local/Cellar/go/1.4.2 (4676 files, 158M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/go.rb
==> Options
--with-cc-all
    Build with cross-compilers and runtime support for all supported platforms
--with-cc-common
    Build with cross-compilers and runtime support for darwin, linux and windows
--without-cgo
    Build without cgo
--without-godoc
    godoc will not be installed for you
--without-vet
    vet will not be installed for you
--HEAD
    Install HEAD version
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
  https://golang.org/doc/code.html#GOPATH

You may wish to add the GOROOT-based install location to your PATH:
  export PATH=$PATH:/usr/local/opt/go/libexec/bin

Die wichtigsten Stücke dort sind diese Zeilen:

/usr/local/Cellar/go/1.4.2 (4676 Dateien, 158 Millionen) *

export PATH = $ PATH: / usr / local / opt / go / libexec / bin

Einrichten der GO-Umgebung

Das zeigt, wo GO installiert wurde. Wir müssen Folgendes tun, um die GO-Umgebung einzurichten:

$ export PATH=$PATH:/usr/local/opt/go/libexec/bin
$ export GOPATH=/usr/local/opt/go/bin

Sie können dann mit GO überprüfen, ob es richtig konfiguriert ist:

$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/usr/local/opt/go/bin"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.4.2/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.4.2/libexec/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

Json2csv einrichten

Sieht gut aus, also installieren wir json2csv:

$ go get github.com/jehiah/json2csv
$

Was ist gerade passiert? Es hat es installiert. Sie können dies überprüfen:

$ $ ls -l $GOPATH/bin
total 5248
-rwxr-xr-x  1 sammingolelli  staff  2686320 Jun  9 12:28 json2csv

OK, warum kann ich json2csvmeine Shell nicht eingeben? Das liegt daran, dass sich das /binVerzeichnis unter $GOPATHnicht in Ihrem befindet $PATH.

$ type -f json2csv
-bash: type: json2csv: not found

Fügen wir es also vorübergehend hinzu:

$ export PATH=$GOPATH/bin:$PATH

Und noch einmal überprüfen:

$ type -f json2csv
json2csv is hashed (/usr/local/opt/go/bin/bin/json2csv)

Jetzt ist es da:

$ json2csv --help
Usage of json2csv:
  -d=",": delimiter used for output values
  -i="": /path/to/input.json (optional; default is stdin)
  -k=[]: fields to output
  -o="": /path/to/output.json (optional; default is stdout)
  -p=false: prints header to output
  -v=false: verbose output (to stderr)
  -version=false: print version string

Fügen Sie die Änderungen hinzu, die wir an $PATHund $GOPATHzu Ihrem vorgenommen haben $HOME/.bash_profile, damit sie zwischen den Neustarts bestehen bleiben.

slm
quelle
18

Ein Video angucken

Im Allgemeinen empfehle ich immer dieses offizielle Video von Go, um einen schnellen Überblick zu erhalten:

http://www.youtube.com/watch?v=XCsL89YtqCs

Es ist einfacher gezeigt zu werden als erzählt zu werden.

@jwfearn umschrieb den wichtigen Teil des Videos:

export GOPATH="${HOME}/gocode"; export PATH="${PATH}:${GOPATH}/bin"; mkdir -p "${GOPATH}"

0x434D53
quelle
2
Exzellentes Einführungsvideo - ich verstehe es immer besser, wenn es mir gezeigt wird.
Joshua Pinter
3
Danke @jwfearn - Videos sind für Musik und andere Unterhaltung; kann nicht von ihnen kopieren und einfügen :-)
kguest
5

Ich fand es einfacher, es so zu machen:

export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH
João Fernandes
quelle
3

Für MAC hat das bei mir gut funktioniert.

sudo nano /etc/bashrc

und fügen Sie das Folgende am Ende der Datei hinzu

export PATH=$PATH:/usr/local/opt/go/libexec/bin
export GOPATH=/usr/local/opt/go/bin

Dies sollte das Problem beheben. Versuchen Sie, ein neues Terminal zu öffnen, und geben Sie $ GOPATH wieder. Sie sollten den richtigen Wert sehen.

Shasti
quelle
2

(für MAC)

Ich habe all diese Antworten ausprobiert und aus einem noch unbekannten Grund hat keine funktioniert.

Ich musste den GOPATH "zwangsernähren", indem ich die Umgebungsvariable für jeden Befehl festlegte, der dies erforderte. Beispielsweise:

sudo env GOPATH=$HOME/goWorkDirectory go build ...

Sogar glidegab mir den GOPATH not setFehler. Es wurde erneut durch "Zwangsernährung" behoben: Ich habe alle diese Antworten ausprobiert und aus einem noch unbekannten Grund hat keine davon funktioniert.

Ich musste den GOPATH "zwangsernähren", indem ich die Umgebungsvariable für jeden Befehl festlegte, der dies erforderte.

sudo env GOPATH=$HOME/goWorkDirectory glide install

Hoffe das hilft jemandem.

Zephel
quelle
2

Sie $GOROOTsollten nicht eingerichtet werden. Sie $GOPATHsollten $HOME/godurch Eingabe eingestellt werdenexport $GOPATH=$HOME/go

Bitte geben Sie ein export GOROOT="", um Ihr Problem zu beheben.

Julien Bouteloup
quelle
1

Tu es einfach export GOPATH="/whatever/you/like/your/GOPATH/to/be".

Volker
quelle
4
Wenn ich ein Go Noob bin, weiß ich noch nicht, "wo ich meinen GOPATH haben möchte". IMHO ist es ein Nachteil, dass es kein Standard- GOPATH-Verhalten gibt, das von einer Umgebungsvariablen überschrieben werden kann.
Jwfearn
0

Wenn Sie nach dem $GOPATHEinrichten auf dieses Problem stoßen , kann dies daran liegen, dass Sie es mit einer nicht unterstützten Shell ausführen. Ich habe es benutzt fishund es hat nicht funktioniert. Das Starten mit hat gut bashfunktioniert.

Julien Fouilhé
quelle
0

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 Pfadbereich einzufü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
0

Führen Sie 'go env' aus und sehen Sie, wohin Ihr GOPATH gerade zeigt. Wenn Sie in dieses Verzeichnis wechseln, sollte Ihr Befehl 'go get..etc' funktionieren.

Alexander Leon
quelle
0

Dieses Problem trat mir bei Himbeer-Pi auf. Ich hatte mich über den VNC-Client angemeldet. Das Problem blieb trotz des Einstellens und Exportierens des GOPATH bestehen. Dann lief der Befehl "go get" ohne sudo und es funktionierte perfekt.

mtamboli
quelle
-1

Ich musste eine Anwendung als root ausführen (um einen Webserver auf Port 80 zu öffnen). Dies führte zu dem Fehler für mich, da der sudo-Benutzer eine andere Umgebung als der normale Benutzer hat und daher GOPATH nicht festgelegt wurde.

Wenn jemand anderes dieses Problem hat, fügen Sie -Ees dem Befehl hinzu, wodurch die Benutzerumgebung erhalten bleibt.

sudo -E go run main.go

Weitere Informationen finden Sie hier: Google Groups - GOPATH-Problem

Pwdr
quelle
Ich bin mir nicht sicher, warum dies abgelehnt wurde, aber ich habe es für mich
behoben