nie można pobrać, $ GOPATH nie jest ustawione


150

Chcę zainstalować json2csv przy użyciu, go get github.com/jehiah/json2csvale pojawia się ten błąd:

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

Jakaś pomoc, jak to naprawić na MacOS?




3
Mam ten sam problem z innym pakietem (pup). Chodźcie, opiekunowie, przygotujcie instalator (OS X), który zakończy pracę! Instalator OS X dla Node jest świetnym przykładem. Korzystanie z węzła nie wymaga dodatkowych kroków instalacji ręcznej. Po prostu działa. Mam nadzieję, że przyszłe wersje instalatora Go będą lepsze.
jwfearn,

Odpowiedzi:


140

[Aktualizacja: od wersji Go 1.8 GOPATHdomyślnie $HOME/go, ale nadal może się to przydać, jeśli chcesz zrozumieć GOPATHukład, dostosować go itp.]

Oficjalna witryna Go omawia GOPATH i sposób rozmieszczenia katalogu obszaru roboczego .

export GOPATH="$HOME/your-workspace-dir/"- uruchom go w swojej powłoce, a następnie dodaj do ~/.bashrclub równoważny, aby został ustawiony dla Ciebie w przyszłości. Go zainstaluje pakiety w sekcji src/, bin/i pkg/, podkatalogi. Będziesz chciał umieścić swoje własne pakiety gdzieś pod $GOPATH/src, na przykład $GOPATH/src/github.com/myusername/jeśli chcesz opublikować w GitHub. Prawdopodobnie będziesz także chciał export PATH=$PATH:$GOPATH/binw swoim .bashrc, abyś mógł uruchamiać skompilowane programy pod $GOPATH.

Opcjonalnie, za pośrednictwem Roba Pike'a , możesz również ustawić CDPATHtak, aby szybciej cdpakować katalogi w bash: export CDPATH=.:$GOPATH/src/github.com:$GOPATH/src/golang.org/xoznacza to, że możesz po prostu pisać cd net/htmlzamiast cd $GOPATH/src/golang.org/x/net/html.

Keith Rarick zauważa, można ustawić GOPATH=$HOME, aby umieścić Go src/, pkg/a bin/katalogi tuż pod homedir. To może być miłe (na przykład możesz już mieć $HOME/binna swojej ścieżce), ale oczywiście niektórzy ludzie używają wielu obszarów roboczych itp.


Dzięki za informację. Potrzebujesz zmienić swój obszar roboczy dla każdego projektu?
Doug Molineux

1
Ogólnie rzecz biorąc, nie można korzystać z jednego obszaru roboczego, którego src/zawiera np github.com/youruser/xi github.com/youruser/y. To jest to co robię. Ludzie mogą mieć swoje powody, by postąpić inaczej (polityka firmy dotycząca oddzielenia projektów?), Ale nie mogę o tym mówić.
twotwotwo

3
$ GOPATH jest ustawione, ale „nie można pobrać, $ GOPATH nie jest ustawione. Aby uzyskać więcej informacji, zobacz: go help gopath” i tak pojawia się.
Tyguy7

Jaka platforma (Windows lub Linux / OS X / inny Unix)? Jeśli nie Windows, co echo $GOPATHmówi? Warto zadać je jako osobne pytanie; Wygląda na to, że jesteś w niecodziennej sytuacji, a debugowanie tych w komentarzach może być trudne.
twotwotwo

2
@ Tyguy7 prawdopodobnie nie zrobiłeś exporttego; uruchom, /bin/bash -c "echo \$GOPATH"aby sprawdzić, czy podprocesy widzą $GOPATH; jeśli echo jest puste, uruchom, export GOPATHa następniego get ...
sanmai


33

Za pomocą naparu

Zainstalowałem go za pomocą brew.

$ brew install go

Po zakończeniu, jeśli uruchomisz to polecenie parzenia, wyświetli się następujące informacje:

$ 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

Najważniejsze elementy to te wiersze:

/usr/local/Cellar/go/1.4.2 (4676 plików, 158 MB) *

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

Konfigurowanie środowiska GO

To pokazuje, gdzie zainstalowano GO. Aby skonfigurować środowisko GO, musimy wykonać następujące czynności:

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

Następnie możesz sprawdzić za pomocą GO, czy jest poprawnie skonfigurowany:

$ 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"

Konfigurowanie json2csv

Wygląda dobrze, więc zainstalujmy json2csv:

$ go get github.com/jehiah/json2csv
$

Co się stało? Zainstalował go. Możesz sprawdzić w ten sposób:

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

OK, więc dlaczego nie mogę wpisać json2csvw mojej powłoce? Dzieje się tak, ponieważ /binkatalogu $GOPATHnie ma na twoim $PATH.

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

Dodajmy więc tymczasowo:

$ export PATH=$GOPATH/bin:$PATH

I sprawdź ponownie:

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

Teraz jest tam:

$ 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

Dodaj modyfikacje, które wprowadziliśmy do $PATHi $GOPATHdo Twojego, $HOME/.bash_profileaby zachować je między ponownymi uruchomieniami.


18

Obejrzyj wideo

Ogólnie rzecz biorąc, zawsze polecam ten oficjalny film z Go, aby uzyskać szybki przegląd sprawy:

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

Łatwiej jest pokazać, niż powiedzieć.

@jwfearn sparafrazował ważną część filmu:

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


2
Doskonały film wprowadzający - zawsze lepiej rozumiem, kiedy jest mi pokazywany.
Joshua Pinter

3
Dzięki @jwfearn - filmy są przeznaczone do muzyki i innej rozrywki; nie można ich kopiować i wklejać :-)
kguest

5

Okazało się, że łatwiej to zrobić w ten sposób:

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

3

W przypadku MAC to działało dobrze.

sudo nano /etc/bashrc

i dodaj poniżej na końcu pliku

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

To powinno rozwiązać problem. Spróbuj otworzyć nowy terminal i powtórz polecenie $ GOPATH, powinieneś zobaczyć poprawną wartość.


2

(dla Maca)

Wypróbowałem wszystkie te odpowiedzi iz jakiegoś wciąż nieznanego powodu żadna z nich nie zadziałała.

Musiałem „wymusić podawanie” GOPATH, ustawiając zmienną środowiskową dla każdego polecenia, które tego wymagało. Na przykład:

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

Nawet glidedawał mi GOPATH not setbłąd. Rozwiązałem to ponownie przez „karmienie na siłę”: wypróbowałem wszystkie te odpowiedzi i z jakiegoś wciąż nieznanego powodu żadna z nich nie zadziałała.

Musiałem „wymusić podawanie” GOPATH, ustawiając zmienną środowiskową dla każdego polecenia, które tego wymagało.

sudo env GOPATH=$HOME/goWorkDirectory glide install

Mam nadzieję, że to komuś pomoże.


2

Twój $GOROOTnie powinien być skonfigurowany. Państwo $GOPATHpowinno być ustawione $HOME/goprzez wpisywanieexport $GOPATH=$HOME/go

Wpisz, export GOROOT=""aby rozwiązać problem.


1

Po prostu zrób export GOPATH="/whatever/you/like/your/GOPATH/to/be".


4
Jeśli jestem idiotą, nie wiem jeszcze, „gdzie chciałbym, żeby mój GOPATH był”. IMHO to przeciąganie, że nie ma domyślnego zachowania GOPATH, które może być nadpisane przez zmienną środowiskową.
jwfearn

0

Jeśli napotkasz ten problem po $GOPATHskonfigurowaniu, może to być spowodowane tym, że uruchamiasz go z nieobsługiwaną powłoką. Używałem fishi to nie działa, uruchomienie go z bashdziałało.


0

Możesz użyć rozwiązania „eksportu”, tak jak sugerowali inni faceci. Chciałbym zapewnić Ci inne rozwiązanie zapewniające stałą wygodę: możesz użyć dowolnej ścieżki jako GOPATH podczas uruchamiania poleceń Go.

Najpierw musisz pobrać małe narzędzie o nazwie gost: https://github.com/byte16/gost/releases . Jeśli używasz ubuntu, możesz pobrać wersję linux ( https://github.com/byte16/gost/releases/download/v0.1.0/gost_linux_amd64.tar.gz ).

Następnie musisz uruchomić poniższe polecenia, aby go rozpakować:

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

Otrzymasz plik wykonywalny gost. Można przenieść go /usr/local/bindo wygodnego użytkowania:

$ sudo mv gost /usr/local/bin

Uruchom poniższe polecenie, aby dodać ścieżkę, której chcesz użyć jako GOPATH, do obszaru ścieżki gost . Wymagane jest nadanie ścieżce nazwy, której będziesz używać później.

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

Uruchom dowolne polecenie Go w formacie:

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

Na przykład, chcesz uruchomić go get github.com/go-sql-driver/mysqlz /home/foobar/barjak GOPATH, zrób to jak poniżej:

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

Pomogłoby ci to ustawić GOPATH i uruchomić polecenie. Ale pamiętaj, że dodałeś ścieżkę do gost„s pathspace . Jeśli jesteś na jakimkolwiek poziomie podkatalogów /home/foobar/bar, możesz nawet uruchomić poniższe polecenie, które w skrócie zrobiłoby to samo:

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

gostto proste narzędzie Go, które może pomóc w zarządzaniu GOPATHami i uruchamianiu poleceń Go. Aby uzyskać więcej informacji na temat używania go do uruchamiania innych poleceń Go, możesz po prostu uruchomić gost help goCmdName. Na przykład chcesz dowiedzieć się więcej install, po prostu wpisz poniższe słowa w:

$ gost help install

Więcej szczegółów znajdziesz również w README projektu: https://github.com/byte16/gost/blob/master/README.md


0

Uruchom „go env” i zobacz, gdzie aktualnie wskazuje GOPATH. Jeśli przejdziesz do tego katalogu, polecenie „go get..etc” powinno działać.


0

Ten problem wystąpił u mnie w raspberry pi. Zalogowałem się przez klienta VNC. Problem nie ustąpił pomimo ustawienia i wyeksportowania GOPATH. Następnie uruchomiono polecenie „go get” bez sudo i działało idealnie.


-1

Musiałem uruchomić aplikację jako root (aby otworzyć serwer WWW na porcie 80), spowodowało to błąd, ponieważ użytkownik sudo ma inne środowisko niż zwykły użytkownik, dlatego GOPATH nie został ustawiony.

Jeśli ktoś ma ten problem, dodaj -Edo polecenia, to zachowa środowisko użytkownika.

sudo -E go run main.go

Aby uzyskać więcej informacji, zobacz dyskusję tutaj: Grupy dyskusyjne - problem GOPATH


Nie jestem pewien, dlaczego ten głos został odrzucony, ale naprawiłem to za mnie…
Pwdr,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.