Jakie powinny być wartości GOPATH i GOROOT?

323

Próbuję zainstalować doozer w ten sposób:

$ goinstall github.com/ha/doozer

Otrzymuję te błędy.

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally
jshen
źródło
3
@Motin powyższy link nie jest już ważny
Jorrit Reedijk
Plik stał się przestarzały dla projektu. Powiązany problem związany z OSX można znaleźć tutaj: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin
Uwaga: domyślnie GOPATHzostanie ustawiony dla Ciebie w wersji Go 1.8 (2017). Zobacz moją odpowiedź poniżej
VonC
Tak, te też uznałem za mylące, w jaki sposób godoki są zorganizowane. Pomogło to: albertech.blogspot.com/2017/01/…
jar
1
@BenyaminJafari, ponieważ goinstalljest naprawdę starożytny przed Go1 i nie istnieje od 2012 roku.
Dave C

Odpowiedzi:

310

GOPATHjest omówione w cmd/godokumentacji :

Do GOPATHwymienia zmiennym otoczeniu miejsca szukać kodu Go. W systemie Unix wartość jest łańcuchem oddzielonym dwukropkami. W systemie Windows wartość jest łańcuchem oddzielonym średnikami. W planie 9 wartością jest lista.

GOPATH należy ustawić, aby pobierać, budować i instalować pakiety poza standardowym drzewem Go.

GOROOTjest omówione w instrukcjach instalacji :

Dystrybucje binarne Go zakładają, że zostaną zainstalowane w /usr/local/go(lub c:\Gopod Windows), ale możliwe jest zainstalowanie narzędzi Go w innym miejscu. W takim przypadku należy ustawić GOROOTzmienną środowiskową, aby wskazywała katalog, w którym została zainstalowana.

Na przykład, jeśli zainstalowałeś Przejdź do katalogu domowego, powinieneś dodać następujące polecenia do $HOME/.profile:

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

Uwaga: GOROOT należy ustawić tylko podczas instalacji w niestandardowej lokalizacji.

(zaktualizowana wersja odpowiedzi Chrisa Buncha ).

pje
źródło
44
Znacznie bardziej wyczerpujące informacje na temat GOPATH można znaleźć w How to Write Go Code. Chwytanie informacji potrzebnych do zrozumienia gopolecenia, które są niezbędne do pracy z Go. Na przykład goinstallpowinno być teraz użycie OP go get.
Sonia
13
Zwróć również uwagę na faktyczną ścieżkę instalacji go. Na przykład, w domyślnej konfiguracji homebrew, homebrew zainstaluje go /usr/local/Cellar/go/. W takim przypadku ścieżkę eksportu należy ustawić za pomocą export GOROOT=/usr/local/Cellar/go/{version}i export PATH=$PATH:$GOROOT/bin.
ekillaby
10
Musiałem zrobić, export GOROOT=/usr/local/Cellar/go/1.2/libexec/żeby mój zaczął pracować z naparami.
Steven Soroka,
Nie mogę zasugerować tej edycji, ponieważ aplikacja skarży się, że moja edycja „wydaje się zawierać” niesformatowany kod (który tego nie robi; wielkie dzięki SO), ale:
Wildcard
Począwszy od wersji Go 1.10, jeśli GOROOT jest wyłączony, narzędzie go spróbuje to rozgryźć według własnej lokalizacji. Nie mogę również wkleić linku, ponieważ wklejanie nie działa w aplikacji Stack Exchange na iOS. W tej chwili bardzo sfrustrowany.
Wildcard
97

Oto moja prosta konfiguracja:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

GOROOT, GOPATH, PATH są ustawiane w następujący sposób:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Krótko mówiąc:

GOROOT jest przeznaczony do kompilatora / narzędzi pochodzących z instalacji go.
GOPATH jest dla twoich projektów go / bibliotek stron trzecich (pobranych z „go get”).

EvgenijM86
źródło
Myślę, że ta odpowiedź jest łatwiejsza do zrozumienia, ponieważ istnieje mapowanie względem struktury folderów.
h-rai
Czy GOPATH zawiera całe drzewa projektów (np. Git) z plikami non-go - np. Obrazy, skrypty, pliki kompilacji itp.?
Serge Merzliakov
52

Pierwszy bieg go env.
Jeśli zauważysz, że go nie jest zainstalowany, możesz go zainstalować za pośrednictwem homebrewlub za pośrednictwem pakietu i / lub innych sposobów.
Jeśli widzisz dane wyjściowe, oznacza to, że Gojest zainstalowany.
Pokazuje wszystkie envs, które są ustawione i nie są.

Jeśli widzisz pusty dla GOROOT:

  1. Uruchom which go(na moim komputerze /usr/local/go/bin/go:)
  2. następnie wyeksportuj w ten sposób export GOROOT=/usr/local/go

Jeśli widzisz pusty dla GOPATH:

  1. Utwórz mój katalog w dowolnym miejscu na swoim komputerze dla projektów go w moim przypadku: ~/GO_PROJECTS
  2. Następnie export GOPATH=~/GO_PROJECTS
РАВИ
źródło
2
which gozrobił to dla mnie. Używał innej lokalizacji instalacji go z poprzedniej instalacji przy użyciu Chocolatey. Usunął ten folder i usunął go ze zmiennej PATH. Teraz działa. Dzięki!
sgarg
which gopolecenie nie działało dla mnie w systemie Windows 7. Jak znaleźć miejsce, w którym należy uruchomić to polecenie
firstpostcommenter
Odpowiednie polecenie systemu Windows where gopokazuje ścieżkę do wykonanego pliku
Falco
export GOPATH=~/GO_PROJECTSwykonał pracę
Thamaraiselvam
39

GOPATHjest omówione tutaj :

GOPATHZmiennej środowiskowej

GOPATH może być ustawiona na rozdzieloną dwukropkami listę ścieżek, w których można znaleźć kod Go, obiekty pakietu i pliki wykonywalne.

Ustaw, GOPATHaby używać goinstall do budowania i instalowania własnego kodu i bibliotek zewnętrznych poza drzewem Go (i aby uniknąć pisania Makefiles).

I GOROOTjest omówione tutaj :

$GOROOTCzęsto korzeń drzewa Go $HOME/go. Domyślnie jest to rodzic katalogu, w którym all.bashjest uruchamiany. Jeśli zdecydujesz się nie ustawiać $GOROOT, musisz uruchomić gomake zamiast make lub gmake podczas programowania programów Go przy użyciu konwencjonalnych plików makefile.

Chris Bunch
źródło
więc jeśli zainstalowałem go w ~ / projects / go, jakie powinny być wartości zmiennej, aby znaleźć os, fmt itp?
jshen
2
Więc gdzie instaluje się Go, kiedy ty sudo apt-get install golang?
weberc2
9
@ weberc2 jeśli uruchomisz go env, powinieneś zobaczyć tę informację, dla mnie to/usr/lib/go/
Andre
19

Przeczytałem go help gopathdokumenty i wciąż byłem bardzo zdezorientowany, ale znalazłem ten samorodek na innej stronie dokumentu:

Zmienna środowiskowa GOPATH określa lokalizację obszaru roboczego. Jest to prawdopodobnie jedyna zmienna środowiskowa, którą należy ustawić podczas opracowywania kodu Go.

http://golang.org/doc/code.html#GOPATH

Max
źródło
10

GOPATH nie powinien wskazywać na instalację Go, ale raczej na twój obszar roboczy (patrz https://golang.org/doc/code.html#GOPATH ). Ilekroć instalujesz jakiś pakiet za pomocą go get lub go install, wyląduje on w GOPATH. Dlatego ostrzega cię, że zdecydowanie nie chcesz, aby losowe pakiety z Internetu były wrzucane do Twojej oficjalnej instalacji.

arganzheng
źródło
9

Począwszy od wersji 1.8 (Q2 2017), GOPATH będzie domyślnie ustawiony na $ HOME / go

Zobacz numer 17262 i komentarz Roba Pike'a:

$HOME/goTo będzie.
Nie ma jednej najlepszej odpowiedzi, ale jest krótka i słodka, a wybranie tej nazwy może być problemem, jeśli $HOME/gojuż istnieje, co ucieszy tylko ekspertów, którzy już zainstalowali i zrozumieją GOPATH.

VonC
źródło
Jak prosty temat może stać się tak złożony! Dzięki za najlepszą odpowiedź tutaj.
dodgy_coder
@dodgy_coder Właściwie ... spójrz na dwie pierwsze linijki mojej drugiej odpowiedzi: stackoverflow.com/a/37905102/6309 ;) To może być jeszcze prostsze: wcale GOPATH wcale! Więcej szczegółów w stackoverflow.com/a/48914523/6309 .
VonC
tak Zgadzam się, GOPATH nie jest tak naprawdę wymagany, jeśli wybierzesz opcję domyślną, czy to prawda? I tak musiałem to ustawić, ponieważ jest wymagane w środowisku programistycznym Google App Engine (Go Standard). Mówią ci, aby ustawić GOPATH, ale nie mówią, jaką wartość ustawić na ...!
dodgy_coder
@dodgy_coder Tak, domyślnie Go będzie szukać ŚCIEŻKI projektu w ustalonej, z góry określonej wartości.
VonC
6

Jak wspomniano powyżej:

Zmienna środowiskowa GOPATH określa lokalizację obszaru roboczego.

W przypadku systemu Windows zadziałało to dla mnie (w oknie Ms-dos):

set GOPATH=D:\my_folder_for_go_code\

Spowoduje to utworzenie zmiennej GOPATH, którą Ms-dos rozpoznaje, gdy jest używana w następujący sposób:

cd %GOPATH%
Timothée HENRY
źródło
3

W GOROOTszczególności Go 1.9 ustawi go automatycznie na ścieżkę instalacji.
Nawet jeśli masz zainstalowanych wiele Go, wywołanie wersji 1.9.x ustawi się GOROOTna /path/to/go/1.9(wcześniej, jeśli nie jest ustawione, przyjmowana jest domyślna ścieżka jak /usr/local/golub c:\Go).

Zobacz recenzję CL Go 53370 :

go toolBędą teraz używać ścieżkę, z której został on wywoływany próbować zlokalizować korzeń idź zainstalować drzewo .
Oznacza to, że jeśli cała instalacja Go zostanie przeniesiona do nowej lokalizacji, go toolpowinna ona nadal działać jak zwykle.

Można to zastąpić przez ustawienie GOROOTw środowisku, co powinno być wykonane tylko w nietypowych okolicznościach.
Pamiętaj, że nie wpływa to na wynik runtime.GOROOT()funkcji , która będzie nadal raportować pierwotne miejsce instalacji; można to naprawić w późniejszych wersjach.

VonC
źródło
0

Począwszy od 2020 r. I wersji 1.13+, w systemie Windows najlepszym sposobem na aktualizację GOPATH jest po prostu wpisanie wiersza polecenia:

setx GOPATH C:\mynewgopath
Farshid
źródło
0

Oto jedno rozwiązanie (pojedynczy użytkownik):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

gonarzeka, jeśli zmienisz .gopathna .go.

Chciałbym, żeby poszli z tym, co rust/cargozrobili chłopaki i po prostu umieścili wszystko w jednym miejscu.

odłamki
źródło
-1

w osx, zainstalowałem z naparem, oto ustawienie, które działa dla mnie

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"
Edwin Ikechukwu Okonkwo
źródło
-1

Musiałem dołączyć

export GOROOT=/usr/local/Cellar/go/1.10.1/libexec

do mojego ~ / .bash_profile w Mac OS X.

Shammi Shailaj
źródło
-1

Istnieje również przypadek, w którym gdy korzystamy z go, kompiluje wszystkie pliki go.

Powiedzmy, że mieliśmy jeden plik main.go, a później zmieniliśmy bieżący plik na main_old.go, a następnie dodaliśmy nasz nowy plik main.go. Następnie, gdy zbudujemy naszą aplikację, wszystkie pliki go zostaną skompilowane. Tak więc występujący błąd może wynikać z błędu kompilacji w niektórych innych plikach go.

Jino Jossy
źródło
-1

Po zainstalowaniu Go lang GOROOT jest katalogiem głównym instalacji.

Kiedy wybuchłem plik binarny Go Lang w katalogu Windows C: \, moim GOROOT powinien być C: \ go. W przypadku instalacji z instalatorem Windows może to być C: \ Program Files \ go (lub C: \ Program Files (x86) \ go, w przypadku pakietów 64-bitowych)

 GOROOT = C:\go

podczas gdy mój GOPATH to lokalizacja kodu źródłowego Go lang lub obszaru roboczego.

Jeśli mój kod źródłowy Go Go znajduje się w C: \ Users \\ GO_Workspace, twoja GOPATH wyglądałaby następująco:

 GOPATH = C:\Users\<xyz>\GO_Workspace
Amit Kaneria
źródło
-1

Nie musisz tego jawnie ustawiać GOROOT(nowoczesne wersje Go mogą samodzielnie to ustalić na podstawie lokalizacji uruchomionego pliku binarnego).

Ponadto wystąpił błąd podczas próby pracy z vgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

Usunięcie GOROOT, zaktualizowanie mojego GOPATH i export GO111MODULE="on"rozwiązanie problemu.

GOPATH patrz tutaj

GOPATH może być ustawiony na rozdzieloną dwukropkami listę ścieżek, w których można znaleźć kod Go, obiekty pakietu i pliki wykonywalne.

Ustaw GOPATH, aby używał goinstall do budowania i instalowania własnego kodu i zewnętrznych bibliotek poza drzewem Go (i aby uniknąć pisania Makefiles).

Effi Bar-She'an
źródło
-2

wartości powinny wynosić (MACOS):

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)
Diego Santa Cruz Mendezú
źródło
-3

Jeśli używasz dystrybucji, powinieneś wskazać, gdzie znajdują się pliki dołączania, na przykład:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(To dotyczy Fedory 20)

Breno Leitão
źródło