Кстати: это совершенно неправильный способ установки пакета. Это никогда не сработает. go installустанавливает пакеты, а не отдельные файлы. Прочтите все на golang.org/cmd/go и узнайте, как настроить файлы.
Volker
спасибо за внимание!
user3918985 09
2
Я думаю, вы ищете иди сборку.
bunnybare
2
Я не уверен, что согласен с тем, что это совершенно неправильно. Когда установлен GOBIN, существует два различных поведения: при использовании go build <gofile.go> исполняемый файл создается в той же папке. При использовании go install <gofile.go> исполняемый файл создается в GOBIN.
Эрез А. Корн
2
FWIW - стандартная документация для начала работы рекомендует сделать именно это. golang.org/doc/install
Майк Бакби
Ответы:
46
Обновление 2020: с 1.11 Go и внедрение модулей Go , GOPATHбольше не требуется для каждого проекта, и по умолчанию~/go для глобальных инструментов / проекта вы бы go get.
В 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 - это список деревьев каталогов, содержащих исходный код Go. С ним обращаются для разрешения импорта, который не может быть найден в стандартном дереве Go.
Если вы это сделали go build, вы также можете попробовать go install(нет custom.go): вы хотите установить пакет, а не отдельный файл.
ты имеешь ввиду это? Я повторил $ PATH и получил следующее: / Users / apple / bin: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin: / usr / local / go / bin: / usr / local / mysql / bin
да, это правильный ответ. просто создайте / bin в этом GOPATH
swdev
7
После пути экспорта я получил ошибку cannot install, GOBIN must be an absolute path:(
lee
@lee Вы использовали ..или ~по указанному вами пути? Я получил эту ошибку и просто переключился на абсолютный путь, такой как /home/ben/bin/или даже $HOME/bin/. Моя полная команда была (в Fishshell, go v1.11) env GOBIN=$HOME/bin/ go install testfile.go.
Бенни Джобиган
40
Как новичок, я столкнулся с этой ошибкой, когда пробовал различные команды go (сборка, запуск и установка). Короче говоря, вы не можете пойти установить на filename.go . Вы можете установить только пакет.
Это сбивало с толку, потому что я узнал, что:
nate:~/work/src/dir $ go run hello/hello.go
hello, world.
работает отлично. Но я не мог понять, почему установка не работает:
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)
Независимо от того, в каком каталоге я был:
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)
Эта путаница вызвана тем, что 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), остальные интерпретируются как файловая система пути из-за ведущих периодов.
go install <gofile>задокументировано, в go help packagesкотором go install --helpимеется в виду. Проблема в том, что go install(в 1.9.2 и ранее) ведет себя непоследовательно, в одном случае это требует, а в другом - не требует явного задания GOBIN.
Стево Славич
7
Как указывалось в предыдущих ответах, если ваш 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
Вы действительно хотите использовать исполняемые файлы для разработки /usr/local/go/bin?
Дольф
1
Что касается установки GOBINверсии переменной, которая не требует этого и просто полагается на GOPATH:
GOBINтребуется, если у нас нет пакета, т.е. файл находится прямо в GOPATHкаталоге. Это вероятно, когда мы пробуем функции Go в качестве учащихся.
Для типичных проектов Go файлы находятся в каталогах пакетов. Для них этого GOPATHдостаточно.
Другими словами, оба следующих решения будут работать: a. Установить GOBINявно как $ GOPATH / bin [только в учебных целях, можно избежать] b. Создайте подкаталог с именем вашего пакета и переместите в него файлы .go.
Думаю, утилиты Go должны удалить указанную выше ошибку и лучше справиться со сценарием - в зависимости от того, является ли аргумент каталогом или исходным файлом.
В режиме с поддержкой модулей 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 и узнайте, как настроить файлы.Ответы:
Обновление 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
переменную.Удостовериться:
bin
папка в папке GOPATH.См. Переменную среды GOPATH (где DIR - это
GOPATH
папка):Например, в этом потоке показано, что происходит в случае, когда сборка go выполняется вне
GOPATH/src
:Смотрите Go Build
Если вы это сделали
go build
, вы также можете попробоватьgo install
(нетcustom.go
): вы хотите установить пакет, а не отдельный файл.источник
Я установил путь ГОБИНА, и это сработало для меня
источник
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:
источник
Для
*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
следующим образом:источник
/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
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>
источник
Вам не нужен $ GOBIN, если вы правильно установили $ GOPATH . Если да, просто еще раз проверьте, находится ли ваш проект в папке $ GOPATH / src .
источник
Из https://golang.org/cmd/go/#hdr-Environment_variables :
и https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :
и https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
Итак, похоже, что в основном вы можете использовать GOBIN для временного или постоянного переопределения двоичного места установки по умолчанию (т.е.
$GOPATH/bin
). Я успешно установил однофайловый "скрипт" с использованиемenv GOBIN=$HOME/bin/ go install testfile.go
. Это было сделано с помощью go v1.11.источник
Пытаться
export GOROOT=""
export PATH=$PATH:$GOROOT/bin
источник