GOBIN не установлен: невозможно запустить go install

Я пытаюсь установить свой собственный пакет для моего файла main.go. Однако, когда я бежал

go install custom.go

Я получил эту ошибку

go install: no install location for .go files listed on command line (GOBIN not set)

Как установить GOBIN?

Ответ 1

Проверьте переменную 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): вы хотите установить пакет, а не один файл.

Ответ 2

Я установил путь GOBIN и работал у меня

export GOBIN=[WorkspacePath]/bin

Ответ 3

Как новичок, я столкнулся с этой ошибкой, когда я пытался использовать различные команды 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.

Ответ 4

На самом деле существует 2 разных типа поведения.

go install <package>

это описано в Скомпилировать и установить пакеты и зависимости Вам не нужно GOBIN, если вы правильно установите GOPATH.

go install <gofile>

это не документировано, и в этом режиме вам нужна переменная env GOBIN.

Ответ 5

В окнах с 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

Ответ 6

Как указывалось в первичном ответе, если ваш 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

Ответ 7

Для системы *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

Ответ 8

Относительно установки переменной GOBIN, не требующей ее, и просто полагающейся на GOPATH:

  • GOBIN требуется, если у нас нет пакета, т.е. файл находится непосредственно в каталоге GOPATH. Это вероятно, когда мы пробуем функции Go в качестве учеников.

  • Для типичных проектов Go файлы находятся в каталогах пакетов. Для них GOPATH достаточно хорош.

  • Другими словами, будут работать оба следующих решения:  а. Установите GOBIN явно как $GOPATH/bin [только для учебных целей, можно избежать]  б. Создайте подкаталог, который будет вашим именем пакета и переместите туда .go файлы.

  • Я думаю, что утилиты Go должны удалить вышеупомянутую ошибку и лучше обработать сценарий - на основе того, является ли аргумент каталогом или исходным файлом

Ответ 9

Вам не нужно $GOBIN, если вы правильно установили $GOPATH. Если это так, просто перепроверьте, если ваш проект находится в папке $GOPATH/src.

Ответ 10

С 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.