BTW: To jest całkowicie błędny sposób instalacji pakietu. To się nigdy nie uda. go installinstaluje pakiety, a nie pojedyncze pliki. Przeczytaj całą stronę golang.org/cmd/go i zobacz, jak skonfigurować swoje pliki.
Volker,
dzięki za ostrzeżenie!
user3918985
2
Myślę, że szukasz go build.
bunnybare
2
Nie jestem pewien, czy zgadzam się, że jest to całkowicie błędne. Gdy GOBIN jest ustawiony, istnieją dwa różne zachowania: Podczas używania go build <gofile.go> plik wykonywalny jest tworzony w tym samym folderze. Używając go install <gofile.go>, plik wykonywalny tworzony jest w GOBIN.
Erez A. Korn
2
FWIW - domyślna dokumentacja na początek zaleca, abyś zrobił dokładnie to. golang.org/doc/install
Mike Buckbee
Odpowiedzi:
46
Aktualizacja 2020: od 1.11 idź i wprowadzenie modułów Go , GOPATHnie jest już potrzebne na projekt, a domyślnie~/go dla globalnych narzędzi / Project byś go get.
binKatalog zawiera skompilowane polecenia.
Każde polecenie ma nazwę odpowiadającą jego katalogowi źródłowemu, ale tylko elementowi końcowemu, a nie całej ścieżce. Oznacza to, że polecenie ze źródłem w DIR/src/foo/quuxjest instalowane w programie DIR/bin/quux, a nie DIR/bin/foo/quux. W „ foo/” prefiks jest usuwany, dzięki czemu można dodać DIR/bindo swojej PATHdostać na zainstalowanych poleceń.
Jeśli GOBINzmienna środowiskowa jest ustawiona, polecenia są instalowane w katalogu, którego nazwa zamiast DIR/bin. GOBINmusi być ścieżką absolutną.
Na przykład ten wątek ilustruje, co dzieje się w przypadku, gdy kompilacja go odbywa się poza GOPATH/src:
Wygląda na to, że twój GOPATHjest ustawiony na, ~/goale uruchomiłeś go installpolecenie~/dev/go
Ścieżka Go to lista drzew katalogów zawierających kod źródłowy Go. Jest konsultowany w celu rozwiązania importu, którego nie można znaleźć w standardowym drzewie Go.
Jeśli już zrobiłeś go build, możesz również spróbować go install(nie custom.go): chcesz zainstalować pakiet, a nie pojedynczy plik.
masz na myśli to? Wykonałem echo $ PATH i otrzymałem to: / Users / apple / bin: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin: / usr / local / go / bin: / usr / local / mysql / bin
tak, to jest poprawna odpowiedź. po prostu utwórz / bin w tym GOPATH
swdev
7
Po ścieżce eksportu wyskoczył mi błąd cannot install, GOBIN must be an absolute path:(
lee
@lee Czy użyłeś ..lub ~w określonej ścieżce? Otrzymałem ten błąd i właśnie przełączyłem się na ścieżkę absolutną, taką jak /home/ben/bin/lub nawet $HOME/bin/. Moje pełne polecenie brzmiało (w fishshell, przejdź do wersji 1.11) env GOBIN=$HOME/bin/ go install testfile.go.
Benny Jobigan
40
Jako początkujący napotkałem ten błąd, gdy próbowałem różnych poleceń go (kompiluj, uruchamiaj i instaluj). Krótko mówiąc, nie można iść zainstalować na filename.go . Możesz zainstalować tylko pakiet.
To było zagmatwane, ponieważ dowiedziałem się, że:
nate:~/work/src/dir $ go run hello/hello.go
hello, world.
działa świetnie. Ale nie mogłem zrozumieć, dlaczego instalacja nie działa:
nate:~/work/src/dir $ go install hello/hello.gogo install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
/opt/go/src/hello (from $GOROOT)
/home/ubuntu/work/src/hello (from $GOPATH)
Bez względu na katalog, w którym byłem:
nate:~/work/src/dir $ cd hello
nate:~/work/src/dir/hello $ go install hello.gogo install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir/hello $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
/opt/go/src/hello (from $GOROOT)
/home/ubuntu/work/src/hello (from $GOPATH)
To zamieszanie jest spowodowane tym, że narzędzie go run działa tylko z plikami źródłowymi Go (nazwy plików kończące się na .go), a polecenie go install akceptuje tylko pakiety. Pakiety są nazywane według ich ścieżek importu lub ścieżek do systemu plików. A zatem:
nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .
wszystko działa świetnie. Pierwsza odnosi się do pakietu poprzez ścieżkę importu (zakładając, że $ GOPATH = "/ home / nate / work", narzędzia go szukają kodu źródłowego w / home / nate / work / src), pozostałe są interpretowane jako system plików ścieżki ze względu na wiodące okresy.
go install <gofile>jest udokumentowany, w go help packagesktórym się go install --helpodwołuje. Problem polega na tym, że go install(w wersji 1.9.2 i wcześniejszych) ma niespójne zachowanie, w jednym przypadku wymaga, aw innym nie wymaga jawnego ustawienia GOBIN.
Stevo Slavić
7
Jak wskazywały poprzednie odpowiedzi, jeśli twój GOPATH env jest poprawnie ustawiony na twój obszar roboczy, nie musisz ustawiać zmiennej GOBIN env.
Sprawdź zmienne środowiskowe go, uruchamiając $ go env | grep -i "^ GO" i poszukaj GOROOT i GOPATH, aby sprawdzić, czy GOROOT wskazuje na twoją instalację źródłową GO, a GOPATH wskazuje na twój obszar roboczy.
Jeśli wszystko jest w porządku, przejdź do podkatalogu, w którym znajduje się plik pkg.go, a następnie uruchom najpierw $ go build (bez nazwy pliku), a następnie $ go install (ponownie bez nazwy pliku). Jeśli nie widzisz żadnego komunikatu o błędzie na ekranie, pakiet jest gotowy w Twoim obszarze roboczym / pkg / youros /../ yourpackage.a
Czy naprawdę chcesz, aby wrzucono do niego pliki wykonywalne dla programistów /usr/local/go/bin?
Dolph
1
Odnośnie ustawienia GOBINwersji zmiennej nie wymagającej tego i polegającej tylko na GOPATH:
GOBINjest wymagane, jeśli nie mamy pakietu, czyli plik znajduje się bezpośrednio w GOPATHkatalogu. Jest to prawdopodobne, gdy jako uczniowie wypróbowujemy funkcje Go
W przypadku typowych projektów Go pliki znajdują się w katalogach pakietów. Do tego GOPATHwystarczy.
Innymi słowy, sprawdzą się oba poniższe rozwiązania: a. Ustaw GOBINjawnie jako $ GOPATH / bin [tylko do celów edukacyjnych, można tego uniknąć] b. Utwórz podkatalog, który będzie nazwą Twojego pakietu i przenieś do niego pliki .go
Wydaje mi się, że narzędzia Go powinny usunąć powyższy błąd i lepiej obsłużyć scenariusz - w oparciu o to, czy argument jest katalogiem, czy plikiem źródłowym
Nie potrzebujesz $ GOBIN, jeśli poprawnie ustawiłeś $ GOPATH . Jeśli tak, po prostu sprawdź ponownie, czy projekt znajduje się w folderze $ GOPATH / src .
Jeśli ustawiona jest zmienna środowiskowa GOBIN, komendy są instalowane w katalogu, którego nazwa określa zamiast DIR / bin. GOBIN musi być ścieżką absolutną.
W trybie obsługi modułów GOPATH nie definiuje już znaczenia importu podczas budowania, ale nadal przechowuje pobrane zależności (w GOPATH / pkg / mod) i zainstalowane polecenia (w GOPATH / bin, chyba że ustawiono GOBIN).
Wydaje się więc, że w zasadzie można użyć GOBIN do tymczasowego lub trwałego nadpisania domyślnej lokalizacji instalacji binarnej (tj $GOPATH/bin.). Udało mi się zainstalować 1-plikowy skrypt go przy użyciu env GOBIN=$HOME/bin/ go install testfile.go. Dokonano tego za pomocą go v1.11.
go install
instaluje pakiety, a nie pojedyncze pliki. Przeczytaj całą stronę golang.org/cmd/go i zobacz, jak skonfigurować swoje pliki.Odpowiedzi:
Aktualizacja 2020: od 1.11 idź i wprowadzenie modułów Go ,
GOPATH
nie jest już potrzebne na projekt, a domyślnie~/go
dla globalnych narzędzi / Project byśgo get
.Idź 1,16 (Q1 2020) powinny domyślnych
GOBIN
doGOPATH[0]/bin
.Ale na razie w przypadku każdego projektu używającego modułów nie będzie już komunikatu o błędzie typu „
go install: no install location ...
”.Oryginalna odpowiedź 2014:
Sprawdź swoją
GOPATH
zmienną.Upewnić się:
bin
folder w folderze GOPATH.Zobacz zmienną środowiskową GOPATH (gdzie „DIR” to
GOPATH
folder):Na przykład ten wątek ilustruje, co dzieje się w przypadku, gdy kompilacja go odbywa się poza
GOPATH/src
:Zobacz Go Build
Jeśli już zrobiłeś
go build
, możesz również spróbowaćgo install
(niecustom.go
): chcesz zainstalować pakiet, a nie pojedynczy plik.źródło
Ustawiłem ścieżkę GOBIN i to zadziałało
źródło
cannot install, GOBIN must be an absolute path
:(..
lub~
w określonej ścieżce? Otrzymałem ten błąd i właśnie przełączyłem się na ścieżkę absolutną, taką jak/home/ben/bin/
lub nawet$HOME/bin/
. Moje pełne polecenie brzmiało (w fishshell, przejdź do wersji 1.11)env GOBIN=$HOME/bin/ go install testfile.go
.Jako początkujący napotkałem ten błąd, gdy próbowałem różnych poleceń go (kompiluj, uruchamiaj i instaluj). Krótko mówiąc, nie można iść zainstalować na filename.go . Możesz zainstalować tylko pakiet.
To było zagmatwane, ponieważ dowiedziałem się, że:
nate:~/work/src/dir $ go run hello/hello.go hello, world.
działa świetnie. Ale nie mogłem zrozumieć, dlaczego instalacja nie działa:
nate:~/work/src/dir $ go install hello/hello.go go install: no install location for .go files listed on command line (GOBIN not set) nate:~/work/src/dir $ go install hello can't load package: package hello: cannot find package "hello" in any of: /opt/go/src/hello (from $GOROOT) /home/ubuntu/work/src/hello (from $GOPATH)
Bez względu na katalog, w którym byłem:
nate:~/work/src/dir $ cd hello nate:~/work/src/dir/hello $ go install hello.go go install: no install location for .go files listed on command line (GOBIN not set) nate:~/work/src/dir/hello $ go install hello can't load package: package hello: cannot find package "hello" in any of: /opt/go/src/hello (from $GOROOT) /home/ubuntu/work/src/hello (from $GOPATH)
To zamieszanie jest spowodowane tym, że narzędzie go run działa tylko z plikami źródłowymi Go (nazwy plików kończące się na .go), a polecenie go install akceptuje tylko pakiety. Pakiety są nazywane według ich ścieżek importu lub ścieżek do systemu plików. A zatem:
nate:~/work/src/dir $ go install dir/hello nate:~/work/src/dir $ go install ./hello/ nate:~/work/src/dir/hello $ go install .
wszystko działa świetnie. Pierwsza odnosi się do pakietu poprzez ścieżkę importu (zakładając, że $ GOPATH = "/ home / nate / work", narzędzia go szukają kodu źródłowego w / home / nate / work / src), pozostałe są interpretowane jako system plików ścieżki ze względu na wiodące okresy.
Zobacz także dokumentację GOPATH .
źródło
go install
działa na katalogach i jeśli określisz konkretny plik go, może to spowodować ten konkretny problem.W rzeczywistości istnieją 2 różne rodzaje zachowań.
go install <package>
jest to udokumentowane w Kompilowanie i instalowanie pakietów i zależności Nie potrzebujesz GOBIN, jeśli ustawisz GOPATH poprawnie.
go install <gofile>
nie jest to udokumentowane i potrzebujesz zmiennej GOBIN env w tym trybie.
źródło
go install <gofile>
jest udokumentowany, wgo help packages
którym sięgo install --help
odwołuje. Problem polega na tym, żego install
(w wersji 1.9.2 i wcześniejszych) ma niespójne zachowanie, w jednym przypadku wymaga, aw innym nie wymaga jawnego ustawienia GOBIN.Jak wskazywały poprzednie odpowiedzi, jeśli twój GOPATH env jest poprawnie ustawiony na twój obszar roboczy, nie musisz ustawiać zmiennej GOBIN env.
Sprawdź zmienne środowiskowe go, uruchamiając $ go env | grep -i "^ GO" i poszukaj GOROOT i GOPATH, aby sprawdzić, czy GOROOT wskazuje na twoją instalację źródłową GO, a GOPATH wskazuje na twój obszar roboczy.
Jeśli wszystko jest w porządku, przejdź do podkatalogu, w którym znajduje się plik pkg.go, a następnie uruchom najpierw $ go build (bez nazwy pliku), a następnie $ go install (ponownie bez nazwy pliku). Jeśli nie widzisz żadnego komunikatu o błędzie na ekranie, pakiet jest gotowy w Twoim obszarze roboczym / pkg / youros /../ yourpackage.a
źródło
W oknach z cygwin dobrym pomysłem wydaje się ustawienie GOBIN na $ GOPATH / bin.
i pamiętaj, aby odpowiednio uciec z separatora nazwy pliku systemu Windows:
źródło
W przypadku
*nix
systemu sprawdź, gdziego
jest zainstalowany, wykonując następujące polecenie:$ which go
które wyjście powiedzmy:
/usr/local/go/bin/go
następnie dodaj następujące wpisy w
~/.bash_profile
lub w~/.zshrc
:export GOROOT=/usr/local/go export GOPATH=$GOROOT/src //your-go-workspace export GOBIN=$GOROOT/bin //where go-generate-executable-binaries PATH=$PATH:$GOPATH:$GOBIN export PATH
PS: Nie zapomnij o źródle
~/.bash_profile
lub~/.zshrc
w następujący sposób:źródło
/usr/local/go/bin
?Odnośnie ustawienia
GOBIN
wersji zmiennej nie wymagającej tego i polegającej tylko naGOPATH
:GOBIN
jest wymagane, jeśli nie mamy pakietu, czyli plik znajduje się bezpośrednio wGOPATH
katalogu. Jest to prawdopodobne, gdy jako uczniowie wypróbowujemy funkcje GoW przypadku typowych projektów Go pliki znajdują się w katalogach pakietów. Do tego
GOPATH
wystarczy.Innymi słowy, sprawdzą się oba poniższe rozwiązania: a. Ustaw
GOBIN
jawnie jako $ GOPATH / bin [tylko do celów edukacyjnych, można tego uniknąć] b. Utwórz podkatalog, który będzie nazwą Twojego pakietu i przenieś do niego pliki .goWydaje mi się, że narzędzia Go powinny usunąć powyższy błąd i lepiej obsłużyć scenariusz - w oparciu o to, czy argument jest katalogiem, czy plikiem źródłowym
źródło
Dla użytkowników WINDOWS
Otwórz wiersz polecenia (
Win
+r
następnie wpiszcmd
) lub okno PowerShell (Win
+x
następnie wpiszi
).Ustawianie GOPATH
go env -w GOPATH=c:\your-go-work
Więcej szczegółów w linku poniżej https://github.com/golang/go/wiki/SettingGOPATH#windows
Ustawianie GOBIN
go env -w GOBIN=C:\somewhere\else\bin
Polecam sprawdzić przykład kodu dostarczony przez golang. Bardzo mi to pomogło. https://golang.org/doc/code.html#Command
źródło
W systemie Windows:
go env -w GOBIN=C:\Users\yourname\go\bin
Potwierdź za pomocą
go env
polecenia, że GOBIN jest ustawiony, a następniego install
polecenie poprawnie zapisze plik wykonywalny w katalogu bin.źródło
Ja też miałem ten sam problem (GOBIN nie musi być ustawiany osobno), upewnij się, że masz następujące
go install <your_module>
źródło
Nie potrzebujesz $ GOBIN, jeśli poprawnie ustawiłeś $ GOPATH . Jeśli tak, po prostu sprawdź ponownie, czy projekt znajduje się w folderze $ GOPATH / src .
źródło
Z https://golang.org/cmd/go/#hdr-Environment_variables :
i https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :
i https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
Wydaje się więc, że w zasadzie można użyć GOBIN do tymczasowego lub trwałego nadpisania domyślnej lokalizacji instalacji binarnej (tj
$GOPATH/bin
.). Udało mi się zainstalować 1-plikowy skrypt go przy użyciuenv GOBIN=$HOME/bin/ go install testfile.go
. Dokonano tego za pomocą go v1.11.źródło
Próbować
export GOROOT=""
export PATH=$PATH:$GOROOT/bin
źródło