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?
[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.
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
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
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"
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.
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}"
Ich fand es einfacher, es so zu machen:
export GOROOT=$HOME/go
export GOPATH=$GOROOT/bin
export PATH=$PATH:$GOPATH
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.
(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.
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.
Mach einfach export GOPATH="/whatever/you/like/your/GOPATH/to/be"
.
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.
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
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.
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.