Jak ustawić zmienną środowiskową GOPATH na Ubuntu? Jaki plik muszę edytować?


258

Próbuję zrobić go get:

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

i kończy się niepowodzeniem z następującym błędem:

package github.com/go-sql-driver/mysql: cannot download, $GOPATH not set. For more details see: go help gopath

kiedy zrobię a go env, lista wartości Go jest pokazana jak poniżej:

ubuntu@ip-xxx-x-xx-x:~$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CGO_ENABLED="1"

oczywiście GOPATH nie jest ustawiony, jak i gdzie go ustawić?

Widzę wiele wątków, które wspominają o tym błędzie, ale żaden nie zawiera odpowiedzi na moje pytanie, który plik należy edytować, aby podać wartość dla tej ścieżki?


Jakiej powłoki używasz?
fuz

3
Oprócz odpowiedzi na temat tego, jak to ustawić, zobacz tę odpowiedź SO , która wyjaśnia, czym jest GOPATH i jak należy go ogólnie używać
Louis Maddox



1
Uwaga: Go 1.8+ (Q2 2017) ustawi się GOPATHdla Ciebie: patrz moja odpowiedź poniżej .
VonC

Odpowiedzi:


284

Nowy sposób:

Sprawdź tę odpowiedź.

Stara droga:

Wystarczy dodać następujące wiersze do ~ / .bashrc, a to się utrzyma. Możesz jednak użyć innych ścieżek, które lubisz jako GOPATH zamiast $ HOME / przejdź do mojej próbki.

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

14
Ścieżka była /usr/share/gona moim Ubuntu 13.10.
tsusanka,

35
NIE używaj / usr / share / go. GOPATH jest „obszarem roboczym” go, w którym pobiera pakiety itd. Utwórz nowy katalog i użyj go. Polecam ~ / .go
Bryan Larsen

16
Jak podano w odpowiedzi user2128535, GOROOT powinien być ustawiony na / usr / lib / go
trungly


12
Pamiętaj, aby $ source ~/.bashrc;)
odwieść

65

Ubuntu 14.04

export GOPATH=$HOME/go

Dodatkowo możesz dodać ten ciąg do pliku

$HOME/.bashrc

1
Twój komentarz jest mylący, ponieważ odnosi się do teraz usuniętej linii oryginalnej odpowiedzi.
Marcel Burkhard

mkdir -p ~ / go / bin export GOPATH = ~ / go export PATH = $ PATH: $ GOPATH / bin:
Alex Punnen

61

GOPATH powinien być ustawiony na nowo utworzony pusty katalog. Jest to „obszar roboczy”, w którym pobierane są pakiety itd. Używam ~ / .go.

Na przykład:

mkdir ~/.go
echo "GOPATH=$HOME/.go" >> ~/.bashrc
echo "export GOPATH" >> ~/.bashrc
echo "PATH=\$PATH:\$GOPATH/bin # Add GOPATH/bin to PATH for scripting" >> ~/.bashrc
source ~/.bashrc

źródło: http://www.larry-price.com/blog/2013/12/15/setting-up-a-go-environment-in-ubuntu-12-dot-04/


1
Dziękuję bardzo
Dylan B

35

New Way: Go Modules

Od wersji 1.11 nie musisz już używać GOPATH. Po prostu przejdź do katalogu projektu i zrób to raz:

go mod init github.com/youruser/yourrepo
  • Dzięki temu Go tworzy katalog główny modułu w tym katalogu.
  • Możesz utworzyć dowolną liczbę modułów.
  • Aby uzyskać instrukcje krok po kroku, zobacz także tę odpowiedź .

Old Way: GOPATH

Jeśli nalegasz na współpracę z GOPATH, zwróć uwagę na to:

  • Od wersji 1.8 nie musisz ustawiać GOPATH ani GOROOT.
  • GOPATH domyślnie znajduje się w katalogu użytkownika / home.

Z dokumentacji :

Jeśli nie ustawiono GOPATH, zakłada się, że to $ HOME / go w systemach Unix i% USERPROFILE% \ go w systemie Windows. Jeśli chcesz użyć niestandardowej lokalizacji jako obszaru roboczego, możesz ustawić zmienną środowiskową GOPATH.


34

Jeśli na przykład jest to Ubuntu, po zainstalowaniu pakietów:

$sudo apt install golang -y

Wystarczy dodać następujące wiersze do ~ / .bashrc (Twojego użytkownika)

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

19
export GOPATH=/path/desired/here

Nie ma potrzeby edytowania żadnego pliku, możemy po prostu użyć powyższego polecenia, aby bezpośrednio edytować zmienne środowiskowe Go.


11
Nie jest to jednak trwałe. Jeśli chcesz, aby ta opcja pozostała - prawdopodobnie tak będzie - musisz dodać ją do pliku ładowanego podczas logowania.
Cubic

1
Dzięki! Tym, co większość użytkowników nigdy nie sądzi, jest to, że są ludzie, którzy zaczynają od Linuksa i jeśli nie ma dokumentacji, która mówi, co powiedziałeś (ponieważ wszyscy myślą, że to znany fakt), w jaki sposób moglibyśmy dowiedzieć się / znaleźć informacje?
PlayHardGoPro

19

Wpisz ten kod w terminalu.

export GOPATH=path/to/your/gopath/directory

Uwaga : Spowoduje to zresetowanie przy każdym nowym oknie terminala lub ponownym uruchomieniu systemu.

Aby zachować trwałość, wklej poniższy kod do pliku .zshrclub .bashrcpliku zgodnie z powłoką. Te pliki w twoim katalogu domowym . Będzie jak poniżej.

export PATH=path/to/some/other/place/composer/for/example
export GOPATH=path/to/your/gopath/directory
export PATH=$PATH:$GOPATH/bin

11

Będziesz także potrzebował GOPATH później. Dodaj to do ~/.bashrc.


10
Tak, miałem to na uwadze, ale odrzuciłem możliwość, że facet będzie miał pudełko Ubuntu z niestandardową powłoką i nie będzie tego tak mało prawdopodobne :-)
Vytautas Shaltenis

9

Jeśli skonfigurujesz coś, co wymaga modyfikacji zmiennych środowiskowych, np. Java, Go itp., Będzie to bardzo znane.

Zakładam, że jako ścieżkę Go masz następującą strukturę katalogów:

\---[folder name]
    +---bin
    +---pkg
    \---src
  • otwórz nowy terminal
  • rodzaj sudo nano /etc/environment
  • znajdź PATH=...i przejdź do końca i dodaj dwukropek :po ostatniej ścieżce, a następnie wklej w całości go pathnp/home/user/gocode

i gotowe. To powinno sprawić, że będzie trwały przez system.


1
Nie rozumiem, dlaczego zmienić $ PATH, jeśli go działa dla Davida. Musi ustawić $ GOPATH (patrz odpowiedź Daniela Lin). David może połączyć oba podejścia (lub ustawić w / etc / profile lub $ HOME / .profile). Nawiasem mówiąc, polecam Davidowi przeczytanie tych linków: golang.org/doc/install i golang.org/doc/code.html#GOPATH
zk82

2
@ zk82 $ GOPATH jest zmienną środowiskową i nie rozumiem, dlaczego edytowanie zmiennych środowiskowych w celu dodania tej zmiennej stanowi problem. To samo dotyczy $ JAVA_HOME i innych frameworków, które wymagają takiej konfiguracji.
ymg

Dobra, widzę. Dzięki za komentarz.
zk82

3

Właśnie to działa dla mnie na Ubuntu 15.10 za pomocą fish shell:

# ~/.config/fish/config.fish

set -g -x PATH /usr/local/bin $PATH
set -g -x GOPATH /usr/share/go

Następnie musiałem zmienić uprawnienia do gofolderu (ustawiono go na root)

sudo chown <name>:<name> -R /usr/share/go

3

ścieżka go może być wszędzie tam, gdzie chcesz, po prostu utwórz katalog i ustaw globalną zmienną ścieżki w nazwie GOPATH dla swojego środowiska.

mkdir ~/go
export GOPATH=~/go
go get github.com/go-sql-driver/mysql

2

W Go 1.8 (Q2 2017) nie będziesz musiał edytować żadnego pliku, jeśli zaakceptujesz GOPATHwartość domyślną (ustawioną dla Ciebie)

$HOME/go

Możesz zobaczyć komentarze do numeru 17262 i powiązany głos na Twitterze :

Wybierając wartość domyślną GOPATH, możemy ułatwić naszą dokumentację, ponieważ możemy powiedzieć coś takiego

$ go get github.com/foo/bar

sprawdzi github.com/foo/barrepo w $HOME/go/src/github.com/foo/bar.

Nie musimy rozpraszać przybyszów koniecznością ustawienia env var, wszystko, co musimy zrobić, to umieścić małą nawiasową notatkę na dole strony

$HOME/gojest domyślną ścieżką do obszaru roboczego go.
Jeśli chcesz zmienić tę ścieżkę, ustaw GOPATHzmienną na wybraną przez siebie.


2

Moje środowisko go wyglądało podobnie do twojego.

$go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go-1.6"
GOTOOLDIR="/usr/lib/go-1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

Rozwiązałem to, ustawiając GOPATH na / usr / lib / go . Wypróbuj to.

export GOPATH=/usr/lib/go
export PATH=$PATH:$GOPATH/bin

Czytałem gdzieś, że ustawienie GOPATH tak samo jak katalogu instalacyjnego jest złym pomysłem. Oo
ankush981

2

GOPATH to zmienna środowiskowa do lokalizacji miejsca pracy. GOROOT jest zmienną środowiskową do katalogu instalacyjnego. Chociaż GOROOT i GOPATH są ustawiane automatycznie (jeśli nie wystąpiłby błąd) w czasie instalacji, aby określić je ręcznie, możesz wykonać poniższy proces. Ponadto, aby uzyskać więcej informacji , odwiedź stronę wiki GO .

Lepiej ustawić GOPATH na katalog w katalogu domowym, np. $ HOME / go,% USERPROFILE% \ go (Windows).

  1. To jest rozwiązanie mac, które jest testowane na macOS Sierra, wer. 10.12, a także w Gogland-EAP, który został wprowadzony jako program IDE dla Go przez JetBrains.

Na swoim typie terminala

vim ~/.profile

w otwartym dokumencie na terminalu naciśnij i i dodaj następującą ścieżkę

GOPATH=/path/to/a/directory/inside/home/directory
GOROOT=/path/to/you/go/library
PATH=$PATH:$GOPATH:$GOROOT:$GOROOT/bin

naciśnij ESC i wpisz : x . Na koniec powinieneś ponownie uruchomić ( zamknąć i otworzyć ) terminal lub wylogować się i zalogować ponownie.

  1. Informacje na temat konfiguracji systemu Windows i Linux znajdują się na stronie wiki Go w Githab na temat ustawiania GOPATH-Golang .

UWAGA Nie ustawiaj GOROOT i GOPATH w tym samym katalogu, w przeciwnym razie pojawi się ostrzeżenie.


2
export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin

I możesz sprawdzić przez $ go env


2

(Ubuntu)

Jeśli nie ustawisz GOPATH, zostanie użyta wartość domyślna.

Musisz dodać $ GOPATH / bin do PATH, aby wykonać dowolny plik binarny zainstalowany w $ GOPATH / bin, lub musisz wpisać $ GOPATH / bin / the-command. Dodaj to do swojego ~ / .bash_profile

export PATH=$GOPATH/bin:$PATH

Bieżące polecenie GOPATH:

go env GOPATH

Zmiana polecenia GOPATH:

export GOPATH=$HOME/your-desired-path


0

To była najbardziej denerwująca sprawa. W nadziei na oszczędność czasu.

JEŚLI go został zainstalowany jako użytkownik root. Użytkownik root pliku tekstowego bash_profile twojego systemu ~ / .bash_profile musi mieć $ GOROOT przypisany do katalogu instalacyjnego go, a $ GOPATH musi być przypisany do katalogu go / src.

  ...$# sudo su
  ...$# vi ~/.bash_profile

    ***Story continues in vi editor***

    GOROOT=$GOROOT:/usr/local/go
    GOPATH=$GOPATH:/usr/local/go/src
    ...
    [your regular PATH stuff here]
    ...

upewnij się, że ścieżka do pliku binarnego znajduje się na twojej ścieżce na .bash_profile

ŚCIEŻKA = $ ŚCIEŻKA: $ HOME / bin: / usr / local / bin: / usr / local / go / bin

ŚCIEŻKA może być tak długim ciągiem, jakim musi być .. aby dodać nowe elementy, oddzielając je tylko dwukropkiem:

zamknij edytor vi i zapisz profil bash (: wq oznacza zapis i zamknij)

  [esc] 
  [shift] + [:] 
  :wq

Musisz wylogować się z terminala i zalogować się ponownie, aby profil ponownie się zainicjował .. lub możesz po prostu uruchomić go za pomocą eksportu.

...$# export GOPATH=/usr/local/go/src

Możesz zweryfikować go env:

...$# go env

Tak!

GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/usr/local/go/src"
GORACE=""
GOROOT="/usr/local/go"

Teraz możesz sudo i go będzie mógł pobierać i tworzyć katalogi wewnątrz go / src i możesz przejść do tego, co chciałeś zrobić.

przykład

# sudo go get github.com/..

Teraz napotkasz inny problem ... być może nie masz zainstalowanego gita ... to kolejna przygoda .. :)


Nie rób tego Zdajesz nie chce skompilować rzeczy jako root a ty nie chcesz go get, aby kłaść wszędzie blisko GOROOT.
Dave C

W jaki sposób jeden przebieg przebiega pod normalnym użytkownikiem? Dzięki wielkie. Rzeczy nie działały podczas instalacji i skończyłem na testowej maszynie wirtualnej, aby wypróbować GO.
user3151532

0

Na moim komputerze Fedora 20 dodałem następujące wiersze do mojego ~ / .bashrc:

export GOROOT=/usr/lib/golang
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

3
Nie ustawiajGOROOT . (Chyba, że ​​jesteś w bardzo małej grupie ludzi, którzy używają binarnej dystrybucji Go, ale instalują ją gdzieś niestandardowo.)
Dave C

0

Jeszcze inne rozwiązanie: eksportuj wszystkie GO*zmienne środowiskowe zgo env

.bashrc:

eval $(go env | grep '^GO[A-Z0-9_]*=' | while read setenv; do
  echo "export $setenv; "
done 2> /dev/null)

[[ -n $GOPATH ]] || export GOPATH="$HOME/go/bin"
[[ -n $GOROOT ]] || export GOROOT=/usr/bin/go
export PATH="$PATH:$GOPATH/bin:$GOROOT/bin"

1
evaljest zwykle złym pomysłem i przesadą w tej sytuacji IMHO
Paweł Prażak

@ PawełPrażak Dlaczego? (Nie jestem ekspertem od skryptów powłoki)
DMaster

1
jeśli w ocenie jest błąd, konsekwencje mogą być bolesne; tutaj pytanie dotyczyło GOPATHtylko eksportu
Paweł Prażak

0

Edytuj swój, ~/.bash_profileaby dodać następujący wiersz:

$ export GOPATH=$HOME/work

Zapisz i zamknij edytor. Następnie zdobądź swój~/.bash_profile

$ source ~/.bash_profile

Uwaga: Ustaw ścieżkę GOBIN, aby generowała plik binarny po uruchomieniu instalacji go

$ export GOBIN=$HOME/work/bin


-1

Jak napisano w oficjalnych instrukcjach :

Zmienna środowiskowa GOPATH określa lokalizację obszaru roboczego. Domyślnie jest to katalog o nazwie go wewnątrz katalogu domowego, więc $ HOME / go w systemie Unix, $ home / go w planie 9 i% USERPROFILE% \ go (zwykle C: \ Users \ YourName \ go) w systemie Windows. Jeśli chcesz pracować w innym miejscu, musisz ustawić GOPATH na ścieżkę do tego katalogu. (Inną częstą konfiguracją jest ustawienie GOPATH = $ HOME.) Należy pamiętać, że GOPATH nie może być tą samą ścieżką, co instalacja Go.

Na przykład, jeśli kodujesz w Jetbrains Webstorm (używając wtyczki Go ), możesz ustawić GOPATHjako /Users/<user>/WebstormProjects.

Mówiąc prościej, ustaw go w dowolnym miejscu, w którym mają się znajdować projekty Go.


-1

Możesz użyć rozwiązania „eksportowania” dokładnie tak, jak sugerowali inni faceci. Chciałbym zapewnić Ci inne rozwiązanie dla stałej wygody: możesz użyć dowolnej ścieżki jako GOPATH podczas uruchamiania poleceń Go.

Po pierwsze, musisz pobrać małe narzędzie o nazwie gost: https://github.com/byte16/gost/releases . Jeśli korzystasz z 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żesz go przenieść w /usr/local/bincelu wygodnego użycia:

$ sudo mv gost /usr/local/bin

Uruchom poniższe polecenie, aby dodać ścieżkę, której chcesz użyć jako GOPATH, do utrzymywanego 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.

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

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

gostto proste narzędzie Go, które może pomóc w zarządzaniu GOPATH i uruchamianiu poleceń Go. Aby uzyskać więcej informacji na temat używania go do uruchamiania innych poleceń Go, wystarczy uruchomić gost help goCmdName. Na przykład, aby uzyskać więcej informacji install, wystarczy wpisać słowa poniżej w:

$ gost help install

Możesz również znaleźć więcej informacji w README projektu: https://github.com/byte16/gost/blob/master/README.md


-1

Musisz zaktualizować ŚCIEŻKĘ na podstawie używanego terminala (bash lub zsh).

  1. Otwórz plik skryptu powłoki terminalu, tj. ~/.bashrcLub ~/.zshrcw edytorze
   vi ~/.zshrc
      (or)
   code ~/.zshrc
  1. Zaktualizuj poniższy GOPATH, jeśli już został znaleziony, lub dodaj poniższy wiersz.

export GOPATH=$HOME/go:/$HOME/projects/go

Tutaj możesz dodać jedną lub więcej ścieżek oddzielonych średnikiem :z różnych lokalizacji projektów GO w systemie do GOPATHzmiennej środowiskowej, tj /path/1:path/2:path/3.

W moim przypadku dodałem 2 ścieżki, jak pokazano powyżej, jedną z katalogu głównego, $HOME/goa drugą z katalogu projektów:/$HOME/projects/go

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.