Я пытаюсь установить собственный пакет для файла 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 и узнайте, как настроить файлы.