Próbuję zainstalować niestandardowy pakiet dla mojego pliku main.go. Jednak kiedy biegałem
go install custom.go
Mam ten błąd
go install: no install location for .go files listed on command line (GOBIN not set)
Jak ustawić GOBIN?
Próbuję zainstalować niestandardowy pakiet dla mojego pliku main.go. Jednak kiedy biegałem
go install custom.go
Mam ten błąd
go install: no install location for .go files listed on command line (GOBIN not set)
Jak ustawić GOBIN?
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
do GOPATH[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ę:
- twoje źródła są pod
GOPATH/src
bin
folder w folderze GOPATH.Zobacz zmienną środowiskową GOPATH (gdzie „DIR” to GOPATH
folder):
bin
Katalog 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 wDIR/src/foo/quux
jest instalowane w programieDIR/bin/quux
, a nieDIR/bin/foo/quux
. W „foo/
” prefiks jest usuwany, dzięki czemu można dodaćDIR/bin
do swojejPATH
dostać na zainstalowanych poleceń.
Jeśli
GOBIN
zmienna środowiskowa jest ustawiona, polecenia są instalowane w katalogu, którego nazwa zamiastDIR/bin
.GOBIN
musi 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
GOPATH
jest ustawiony na,~/go
ale uruchomiłeśgo install
polecenie~/dev/go
Zobacz Go Build
Ś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.
Ustawiłem ścieżkę GOBIN i to zadziałało
export GOBIN=[WorkspacePath]/bin
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 .
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.
go install <gofile>
jest udokumentowany, w go help packages
którym się go install --help
odwoł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.
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
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:
$ echo $GOROOT
C:\Go\
carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOPATH
C:\cygwin64\home\carl\gocode
carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOBIN
C:\cygwin64\home\carl\gocode\bin
W przypadku *nix
systemu sprawdź, gdzie go
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:
$ source ~/.bash_profile
/usr/local/go/bin
?
Odnośnie ustawienia GOBIN
wersji zmiennej nie wymagającej tego i polegającej tylko na GOPATH
:
GOBIN
jest wymagane, jeśli nie mamy pakietu, czyli plik znajduje się bezpośrednio w GOPATH
katalogu. 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 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 .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
Dla użytkowników WINDOWS
Otwórz wiersz polecenia ( Win
+ r
następnie wpisz cmd
) lub okno PowerShell ( Win
+ x
następnie wpisz i
).
Ustawianie GOPATH
UWAGA:
GOPATH
nie może być tą samą ścieżką, co instalacja Go.
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
W systemie Windows:
go env -w GOBIN=C:\Users\yourname\go\bin
Potwierdź za pomocą go env
polecenia, że GOBIN jest ustawiony, a następnie go install
polecenie poprawnie zapisze plik wykonywalny w katalogu bin.
Ja też miałem ten sam problem (GOBIN nie musi być ustawiany osobno), upewnij się, że masz następujące
go install <your_module>
Z https://golang.org/cmd/go/#hdr-Environment_variables :
GOBIN Katalog, w którym polecenie „go install” zainstaluje polecenie.
i https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :
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ą.
i https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
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.
Próbować
export GOROOT=""
export PATH=$PATH:$GOROOT/bin
go install
instaluje pakiety, a nie pojedyncze pliki. Przeczytaj całą stronę golang.org/cmd/go i zobacz, jak skonfigurować swoje pliki.