Я пытаюсь установить свой собственный пакет для моего файла main.go. Однако, когда я бежал
go install custom.go
Я получил эту ошибку
go install: no install location for .go files listed on command line (GOBIN not set)
Как установить GOBIN?
Я пытаюсь установить свой собственный пакет для моего файла main.go. Однако, когда я бежал
go install custom.go
Я получил эту ошибку
go install: no install location for .go files listed on command line (GOBIN not set)
Как установить GOBIN?
Проверьте переменную 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 build
, вы также можете попробовать go install
(no custom.go
): вы хотите установить пакет, а не один файл.
Я установил путь GOBIN и работал у меня
export GOBIN=[WorkspacePath]/bin
Как новичок, я столкнулся с этой ошибкой, когда я пытался использовать различные команды 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.
На самом деле существует 2 разных типа поведения.
go install <package>
это описано в Скомпилировать и установить пакеты и зависимости Вам не нужно GOBIN, если вы правильно установите GOPATH.
go install <gofile>
это не документировано, и в этом режиме вам нужна переменная env GOBIN.
В окнах с cygwin кажется хорошей идеей установить GOBIN в $GOPATH/bin.
и не забудьте правильно удалить разделитель имен файлов Windows:
$ echo $GOROOT
C:\Go\
[email protected] ~/gocode/src/github.com/user/hello
$ echo $GOPATH
C:\cygwin64\home\carl\gocode
[email protected] ~/gocode/src/github.com/user/hello
$ echo $GOBIN
C:\cygwin64\home\carl\gocode\bin
Как указывалось в первичном ответе, если ваш GOPATH env правильно установлен в ваше рабочее пространство, вам не нужно устанавливать переменную env GOBIN.
Пожалуйста, проверьте переменные среды go, запустив $go env | grep -i "^ GO" и обратите внимание на GOROOT и GOPATH, чтобы проверить, указывает ли GOROOT на вашу исходную установку GO и GOPATH, указывающую на ваше рабочее пространство.
Если все правильно, перейдите к поддиректору, в котором находится вашpkg.go, а затем сначала запустите $go build (без имени файла) и $go install (снова с вашим именем файла), если вы не видите сообщение об ошибке на на экране ваш пакет готов в вашей рабочей области/pkg/youros/../yourpackage.a
Для системы *nix
посмотрите, где установлен go
, выполнив следующую команду:
$ which go
который выдает let say:
/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
P.S: Не забудьте указать источник ~/.bash_profile
или ~/.zshrc
следующим образом:
$ source ~/.bash_profile
Относительно установки переменной GOBIN
, не требующей ее, и просто полагающейся на GOPATH
:
GOBIN
требуется, если у нас нет пакета, т.е. файл находится непосредственно в каталоге GOPATH
. Это вероятно, когда мы пробуем функции Go в качестве учеников.
Для типичных проектов Go файлы находятся в каталогах пакетов. Для них GOPATH
достаточно хорош.
Другими словами, будут работать оба следующих решения:
а. Установите GOBIN
явно как $GOPATH/bin [только для учебных целей, можно избежать]
б. Создайте подкаталог, который будет вашим именем пакета и переместите туда .go файлы.
Я думаю, что утилиты Go должны удалить вышеупомянутую ошибку и лучше обработать сценарий - на основе того, является ли аргумент каталогом или исходным файлом
Вам не нужно $GOBIN, если вы правильно установили $GOPATH. Если это так, просто перепроверьте, если ваш проект находится в папке $GOPATH/src.
С 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
). Я успешно установил go-скрипт из 1 файла, используя env GOBIN=$HOME/bin/go install testfile.go
. Это было сделано с помощью go v1.11.