Я пытаюсь установить собственный пакет для файла main.go. Однако когда я побежал
go install custom.go
Я получил эту ошибку
go install: no install location for .go files listed on command line (GOBIN not set)
Как установить ГОБИН?
Я пытаюсь установить собственный пакет для файла main.go. Однако когда я побежал
go install custom.go
Я получил эту ошибку
go install: no install location for .go files listed on command line (GOBIN not set)
Как установить ГОБИН?
Ответы:
Обновление 2020: с 1.11 Go и внедрение модулей Go , GOPATH
больше не требуется для каждого проекта, и по умолчанию~/go
для глобальных инструментов / проекта вы бы go get
.
Go 1.16 (Q1 2020) по умолчанию должен GOBIN
быть GOPATH[0]/bin
.
Но пока для любого проекта, использующего модули, у вас больше не будет сообщения об ошибке типа « go install: no install location ...
».
Оригинальный ответ 2014 г .:
Проверьте свою GOPATH
переменную.
Удостовериться:
- ваши источники находятся под
GOPATH/src
bin
папка в папке GOPATH.См. Переменную среды GOPATH (где DIR - это GOPATH
папка):
В
bin
каталоге хранятся скомпилированные команды.
Каждая команда названа в честь своего исходного каталога, но только последнего элемента, а не всего пути. То есть, команда с источником вDIR/src/foo/quux
установке вDIR/bin/quux
неDIR/bin/foo/quux
.foo/
Префикс " " удален, чтобы вы могли добавитьDIR/bin
его,PATH
чтобы получить доступ к установленным командам.
Если
GOBIN
задана переменная среды, команды устанавливаются в каталог, который она называет, а не вDIR/bin
.GOBIN
должен быть абсолютный путь.
Например, в этом потоке показано, что происходит в случае, когда сборка go выполняется вне GOPATH/src
:
Похоже, у вас
GOPATH
установлено значение,~/go
но вы выполнилиgo install
команду на~/dev/go
Смотрите Go Build
Путь Go - это список деревьев каталогов, содержащих исходный код Go. С ним обращаются для разрешения импорта, который не может быть найден в стандартном дереве Go.
Если вы это сделали go build
, вы также можете попробовать go install
(нет custom.go
): вы хотите установить пакет, а не отдельный файл.
Я установил путь ГОБИНА, и это сработало для меня
export GOBIN=[WorkspacePath]/bin
cannot install, GOBIN must be an absolute path
:(
..
или ~
по указанному вами пути? Я получил эту ошибку и просто переключился на абсолютный путь, такой как /home/ben/bin/
или даже $HOME/bin/
. Моя полная команда была (в Fishshell, go v1.11) env GOBIN=$HOME/bin/ go install testfile.go
.
Как новичок, я столкнулся с этой ошибкой, когда пробовал различные команды go (сборка, запуск и установка). Короче говоря, вы не можете пойти установить на filename.go . Вы можете установить только пакет.
Это сбивало с толку, потому что я узнал, что:
nate:~/work/src/dir $ go run hello/hello.go
hello, world.
работает отлично. Но я не мог понять, почему установка не работает:
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)
Независимо от того, в каком каталоге я был:
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)
Эта путаница вызвана тем, что go run работает только с исходными файлами Go (имена файлов заканчиваются на .go), а go install принимает только пакеты. Пакеты именуются по пути импорта или пути в файловой системе. Таким образом:
nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .
все отлично работают. Первый относится к пакету по пути импорта (при условии, что $ GOPATH = "/ home / nate / work", инструменты go ищут исходный код в / home / nate / work / src), остальные интерпретируются как файловая система пути из-за ведущих периодов.
См. Также документы GOPATH .
go install
работает с каталогами, и если вы укажете конкретный файл go, он может вызвать эту конкретную проблему.
На самом деле есть 2 разных типа поведения.
go install <package>
это задокументировано в Компиляция и установка пакетов и зависимостей. Вам не нужен GOBIN, если вы правильно установили GOPATH.
go install <gofile>
это не задокументировано, и в этом режиме вам понадобится переменная GOBIN env.
go install <gofile>
задокументировано, в go help packages
котором go install --help
имеется в виду. Проблема в том, что go install
(в 1.9.2 и ранее) ведет себя непоследовательно, в одном случае это требует, а в другом - не требует явного задания GOBIN.
Как указывалось в предыдущих ответах, если ваш GOPATH env правильно настроен для вашей рабочей области, вам не нужно устанавливать переменную GOBIN env.
Проверьте переменные среды go, запустив $ go env | grep -i "^ GO" и обратите внимание на GOROOT и GOPATH, чтобы проверить, указывает ли GOROOT на вашу исходную установку GO, а GOPATH указывает на ваше рабочее пространство.
Если все в порядке, перейдите в подкаталог, в котором находится yourpkg.go, затем сначала запустите $ go build (без имени файла), а затем - $ go install (снова без имени файла), если вы не видите сообщения об ошибке на экране, ваш пакет готов в вашем рабочем пространстве / pkg / youros /../ yourpackage.a
В Windows с cygwin кажется хорошей идеей настроить GOBIN на $ GOPATH / bin.
и не забудьте правильно экранировать разделитель имен файлов 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
Для *nix
системы посмотрите, где go
она установлена, выполнив следующую команду:
$ which go
какой вывод скажем:
/usr/local/go/bin/go
затем добавьте следующие записи в ~/.bash_profile
или в ~/.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: Не забудьте указать источник ~/.bash_profile
или ~/.zshrc
следующим образом:
$ source ~/.bash_profile
/usr/local/go/bin
?
Что касается установки GOBIN
версии переменной, которая не требует этого и просто полагается на GOPATH
:
GOBIN
требуется, если у нас нет пакета, т.е. файл находится прямо в GOPATH
каталоге. Это вероятно, когда мы пробуем функции Go в качестве учащихся.
Для типичных проектов Go файлы находятся в каталогах пакетов. Для них этого GOPATH
достаточно.
Другими словами, оба следующих решения будут работать: a. Установить GOBIN
явно как $ GOPATH / bin [только в учебных целях, можно избежать] b. Создайте подкаталог с именем вашего пакета и переместите в него файлы .go.
Думаю, утилиты Go должны удалить указанную выше ошибку и лучше справиться со сценарием - в зависимости от того, является ли аргумент каталогом или исходным файлом.
Для пользователей WINDOWS
Откройте командную строку ( Win
+ r
затем введите cmd
) или окно PowerShell ( Win
+ x
затем введите i
).
Настройка GOPATH
ПРИМЕЧАНИЕ:
GOPATH
не должен совпадать с путем установки Go.
go env -w GOPATH=c:\your-go-work
Подробности по ссылке ниже https://github.com/golang/go/wiki/SettingGOPATH#windows
Настройка ГОБИН
go env -w GOBIN=C:\somewhere\else\bin
Я рекомендую проверить пример кода, предоставленный golang. Это мне очень помогло. https://golang.org/doc/code.html#Command
В Windows:
go env -w GOBIN=C:\Users\yourname\go\bin
Подтвердите с помощью go env
команды, что GOBIN установлен, затем go install
команда правильно сохраняет исполняемый файл в каталоге bin.
У меня тоже была такая же проблема (GOBIN не нужно устанавливать отдельно), убедитесь, что у вас есть следующие
go install <your_module>
Из https://golang.org/cmd/go/#hdr-Environment_variables :
GOBIN Каталог, в который 'go install' будет устанавливать команду.
и https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :
Если задана переменная среды GOBIN, команды устанавливаются в каталог, который он называет, а не в DIR / bin. ГОБИН должен быть абсолютным путем.
и https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
В режиме с поддержкой модулей GOPATH больше не определяет значение импорта во время сборки, но по-прежнему сохраняет загруженные зависимости (в GOPATH / pkg / mod) и установленные команды (в GOPATH / bin, если GOBIN не установлен).
Итак, похоже, что в основном вы можете использовать GOBIN для временного или постоянного переопределения двоичного места установки по умолчанию (т.е. $GOPATH/bin
). Я успешно установил однофайловый "скрипт" с использованием env GOBIN=$HOME/bin/ go install testfile.go
. Это было сделано с помощью go v1.11.
go install
устанавливает пакеты, а не отдельные файлы. Прочтите все на golang.org/cmd/go и узнайте, как настроить файлы.