it-swarm.com.de

download nicht möglich, $ GOPATH nicht gesetzt

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

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

Irgendwelche Hilfe, wie man dies unter MacOS beheben kann?

132
Mona Jalal

[Update: Ab Go 1.8 ist GOPATH standardmäßig auf $HOME/go eingestellt. Dies kann jedoch nützlich sein, wenn Sie das GOPATH-Layout verstehen, anpassen und anpassen möchten.]

Die offizielle Go-Site diskutiert GOPATH und wie man ein Arbeitsbereichsverzeichnis anlegt.

export GOPATH="$HOME/your-workspace-dir/" - Führe es in deiner Shell aus und füge es zu ~/.bashrc oder einem gleichwertigen Element hinzu, damit es in Zukunft für dich festgelegt wird. Go installiert die Pakete unter den Unterverzeichnissen src/, bin/ und pkg/,. Sie möchten Ihre eigenen Pakete irgendwo unter $GOPATH/src ablegen, wie $GOPATH/src/github.com/myusername/, wenn Sie sie auf GitHub veröffentlichen möchten. Wahrscheinlich möchten Sie auch export PATH=$PATH:$GOPATH/bin in Ihrem .bashrc, damit Sie kompilierte Programme unter $GOPATH ausführen können. 

Optional, über Rob Pike , können Sie auch CDPATH einstellen, sodass cd schneller zum Packen von Verzeichnissen in bash verwendet wird: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/x bedeutet, dass Sie statt cd net/html einfach cd $GOPATH/src/golang.org/x/net/html eingeben können. 

Keith Rarick notes können Sie GOPATH=$HOME so einstellen, dass Gos Verzeichnisse src/, pkg/ und bin/ direkt unter Ihrem Homedir gespeichert werden. Das kann Nizza sein (zum Beispiel haben Sie vielleicht $HOME/bin bereits in Ihrem Pfad), aber natürlich verwenden einige Leute mehrere Arbeitsbereiche usw.

129
twotwotwo

Dieser hat funktioniert

Go-Entwicklungsumgebung auf Ubuntu einrichten und $ GOPATH/$ GOROOT reparieren

Schritte

mkdir ~/go

Setze $ GOPATH in .bashrc,

export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin
78
suryakrupa

Brauen verwenden

Ich habe es mit brew installiert.

$ brew install go

Wenn Sie diesen Brew-Befehl ausgeführt haben, werden folgende 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 wichtigen Stücke dort sind diese Zeilen:

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

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

GOs Umgebung einrichten

Das zeigt, wo GO installiert wurde. Um die Umgebung von GO einzurichten, müssen wir Folgendes tun:

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

Sie können dann mit GO prü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 nicht json2csv in meine Shell eingeben? Das liegt daran, dass sich das /bin-Verzeichnis unter $GOPATH nicht in Ihrem $PATH befindet.

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

Lassen Sie uns es vorübergehend hinzufügen:

$ export PATH=$GOPATH/bin:$PATH

Und nochmal ü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, die wir an $PATH und $GOPATH vorgenommen haben, zu Ihrem $HOME/.bash_profile hinzu, damit sie zwischen Neustarts bestehen bleiben.

30
slm

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 gesagt zu werden.

@jwfearn paraphrasierte den wichtigen Teil des Videos:

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

17
0x434D53

Ich fand es einfacher, es so zu machen:

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

Für MAC hat das gut funktioniert. 

Sudo nano /etc/bashrc

und fügen Sie das unten 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 bestätigen Sie mit $ GOPATH den korrekten Wert. 

3
Shasti

(für MAC)

Ich habe alle diese Antworten ausprobiert, und aus irgendeinem noch unbekannten Grund funktionierte keiner von ihnen.

Ich musste den GOPATH "zwingen", indem ich die Umgebungsvariable für jeden Befehl einstellte, der ihn benötigt. Zum Beispiel:

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

Sogar glide gab mir den GOPATH not set-Fehler. Wieder gelöst durch "Zwangsernährung": Ich habe alle diese Antworten ausprobiert, und aus irgendeinem noch unbekannten Grund funktionierte keiner von ihnen.

Ich musste den GOPATH "zwingen", indem ich die Umgebungsvariable für jeden Befehl einstellte, der ihn benötigt.

Sudo env GOPATH=$HOME/goWorkDirectory glide install

Hoffe das hilft jemandem.

2
zephel

Ihr $GOROOT sollte nicht eingerichtet sein. Sie $GOPATH sollten auf $HOME/go eingestellt werden, indem Sie export $GOPATH=$HOME/go eingeben.

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

2

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

1
Volker

Starten Sie 'go env' und sehen Sie, wohin Ihr GOPATH aktuell zeigt. Wenn Sie in dieses Verzeichnis wechseln, sollte der Befehl 'go get..etc' funktionieren.

0
Alexander Leon

Sie können die "Export" -Lösung genauso verwenden, wie es andere Leute vorgeschlagen haben. Ich möchte Ihnen eine andere Lösung für die dauerhafte Bequemlichkeit bieten: Sie können jeden Pfad als GOPATH verwenden, wenn Sie Go-Befehle ausführen.

Zunächst müssen Sie ein kleines Tool mit dem Namen gost: https://github.com/byte16/gost/releases herunterladen. 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 gost erhalten. Sie können es zur bequemen Verwendung nach /usr/local/bin 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 die Pfade pathspacegost einzufügen. 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 Format aus: 

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

Beispielsweise möchten Sie go get github.com/go-sql-driver/mysql mit /home/foobar/bar als GOPATH ausführen. Gehen Sie dazu wie folgt vor:

$ 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 einzustellen und den Befehl auszuführen. Denken Sie jedoch daran, dass Sie den Pfad in pathspace von gost hinzugefügt haben. Wenn Sie sich in irgendeiner Ebene von Unterverzeichnissen von /home/foobar/bar befinden, können Sie auch einfach den folgenden Befehl ausführen, der kurz das Gleiche tun würde:

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

gost ist ein einfaches Tool von Go, mit dem Sie GOPATHs verwalten und Go-Befehle ausführen können. Für weitere Details zur Verwendung anderer Go-Befehle können Sie einfach gost help goCmdName ausführen. Sie möchten beispielsweise mehr über install erfahren, geben Sie einfach die folgenden Wörter ein:

$ gost help install

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

0
Franco

Dieses Problem trat bei Raspberry Pi auf. Ich hatte mich über den VNC-Client angemeldet. Das Problem blieb trotz Einstellung und Export des GOPATH bestehen. Dann lief Ran den Befehl "go get" ohne Sudo und es hat perfekt funktioniert.

0
mtamboli

Wenn Sie nach dem Einrichten von $GOPATH auf dieses Problem stoßen, kann dies daran liegen, dass Sie es mit einer nicht unterstützten Shell ausführen. Ich benutzte fish und es funktionierte nicht. Das Starten mit bash hat gut funktioniert.

0
Julien Fouilhé