Перейти установить не удается с ошибкой: нет места установки для каталога xxx за пределами GOPATH
~/src/go-statsd-client> echo $GOPATH
/Users/me/gopath
~/src/go-statsd-client> echo $GOROOT
/usr/local/Cellar/go/1.1.1\
~/src/go-statsd-client> go install
go install: no install location for directory /Users/me/src/go-statsd-client outside GOPATH
Независимо от того, какая структура проекта в этом случае всегда терпит неудачу с тем же сообщением. Go build отлично работает.
Вот мой go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/me/gopath"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.1.1"
GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
CGO_ENABLED="1"
Это на Mac OSX Mountain Lion, и он был установлен с доморощенным.
Ответы
Ответ 1
Когда вы не указываете аргументы go install
, он по умолчанию пытается установить пакет в текущем каталоге. Сообщение об ошибке сообщает вам, что он не может этого сделать, потому что текущий каталог не является частью вашего $GOPATH
.
Вы можете:
- Определите
$GOPATH
для вашего $HOME (export GOPATH=$HOME
).
- Переместите источник в пределах текущего
$GOPATH
(mv ~/src/go-statsd-client /User/me/gopath
).
После того, как либо, перейдя в каталог go-statsd-client
и набрав go install
, будет работать, и так набирает go install go-statsd-client
из любой точки файловой системы. Созданные двоичные файлы войдут в $GOPATH/bin
.
Как несвязанное предложение, вы, вероятно, хотите, чтобы пространство имен было передано вашим доменным именем, чтобы избежать столкновения имен (например, github.com/you/go-statsd-client
, если это место, где вы храните исходный код).
Ответ 2
Для любых пользователей OS X и будущего меня также необходимо установить GOBIN
, чтобы избежать этого запутанного сообщения при установке и go get
mkdir bin
export GOBIN=$GOPATH/bin
Ответ 3
Вы используете go install в каталоге вне папки GOPATH.
Установите переменную env GOBIN или переместите папку src внутри GOPATH.
GOPATH/
bin/
src/
go-statsd-client/
Дополнительная информация: GO BUILD Исходный код, строка 296
Ответ 4
Вам нужно настроить GOPATH
и GOBIN
. Убедитесь, что вы сделали следующее (замените ~/go
предпочитаемым GOPATH
и затем измените GOBIN
). Это проверено на Ubuntu 16.04 LTS
.
export GOPATH=~/go
mkdir ~/go/bin
export GOBIN=$GOPATH/bin
Выбранный ответ не решил проблему для меня.
Ответ 5
Вам нужно иметь 3 каталога внутри выбранного вами каталога GOPATH.
GOPATH
/bin
/src
/someProgram
program.go
/someLibrary
library.go
/pkg
Затем вы запустите go install
изнутри какой-либо программы (которая помещает исполняемый файл в bin) или someLibrary (который помещает библиотеку в pkg).
Ответ 6
У меня была эта проблема в Windows.
Моя проблема заключалась в том, что моя переменная среды %GOPATH%
была установлена на
C:\Users\john\src\goworkspace
вместо
C:\Users\john\src\goworkspace\
Добавление недостающей конечной косой черты в конце исправлено для меня.
Ответ 7
В моем случае (OS X) это было потому, что я установил GOPATH
в /home/username/go
(согласно книге) вместо /Users/username/go
Ответ 8
Для чего это стоит, вот мой .bash_profile, который хорошо работает для меня на Mac с Atom, после установки перейдите с Homebrew:
export GOROOT='go env GOROOT'
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
Ответ 9
Я нахожусь на Windows, и я получил это, дав команду go help gopath
в cmd и прочитав жирный текст в инструкции,
то есть, если код, который вы хотите установить, находится в ..BaseDir...\SomeProject\src\basic\set
, GOPATH не должен находиться в том же месте, что и код, это должен быть просто базовый проект DIR: ..BaseDir...\SomeProject
.
Переменная окружения GOPATH перечисляет места для поиска кода Go. В Unix значением является строка, разделенная двоеточиями. В Windows значение представляет собой строку, разделенную точкой с запятой. На плане 9 значение представляет собой список.
Если переменная среды не установлена, GOPATH по умолчанию использует подкаталог с именем "go" в домашнем каталоге пользователя ($ HOME/go в Unix,% USERPROFILE%\go в Windows), если только этот каталог не содержит дистрибутив Go. Запустите "go env GOPATH", чтобы увидеть текущую GOPATH.
Смотрите https://golang.org/wiki/SettingGOPATH, чтобы установить пользовательскую GOPATH.
Каждый каталог, указанный в GOPATH, должен иметь предписанную структуру:
Каталог src содержит исходный код. Путь под src определяет путь импорта или имя исполняемого файла.
В каталоге pkg хранятся установленные объекты пакета. Как и в дереве Go, каждая целевая пара операционной системы и архитектуры имеет свой собственный подкаталог pkg (pkg/GOOS_GOARCH).
Если DIR является каталогом, указанным в GOPATH, пакет с источником в DIR/src/foo/bar можно импортировать как "foo/bar", и его скомпилированная форма установлена в "DIR/pkg/GOOS_GOARCH/foo/bar.a". ".
Каталог bin содержит скомпилированные команды. Каждая команда названа по имени своего исходного каталога, но только конечный элемент, а не весь путь. То есть команда с источником в DIR/src/foo/quux устанавливается в DIR/bin/quux, а не в DIR/bin/foo/quux. Префикс "foo/" удаляется, так что вы можете добавить DIR/bin в PATH, чтобы получить доступ к установленным командам. Если установлена переменная среды GOBIN, команды устанавливаются в каталог, который она называет, а не в DIR/bin. Гобин должен быть абсолютный путь.
Вот пример макета каталога:
GOPATH=/home/user/go
/home/user/go/
src/
foo/
bar/ (go code in package bar)
x.go
quux/ (go code in package main)
y.go
bin/
quux (installed command)
pkg/
linux_amd64/
foo/
bar.a (installed package object)
..........
если GOPATH был установлен на Base Project DIR и все еще имеет эту проблему, в окнах вы можете попытаться установить GOBIN как Base Project DIR\bin
или %GOPATH%\bin
.
Ответ 10
В windows мое окно cmd уже было открыто, когда я установил переменную среды GOPATH. Сначала мне пришлось закрыть cmd, а затем снова открыть, чтобы он вступил в силу.
Ответ 11
В OSX Mojave 10.14 go
обычно устанавливается в /usr/local/go
.
Следовательно, настройте эти ENV, и вы должны быть готовы к работе.
export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin
Кроме того, добавьте их в ваш bash_profile
или zsh_profile
если он работает.
echo "export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin" >> ~/.bash_profile && source ~/.bash_profile
Ответ 12
Существует несколько способов исправления, которые были определены в этой теме и в других местах, но большинство людей упускают то, что мы не только решаем существующую проблему, но и пытаемся решить, если мы ошибаемся при разработке проекта по сравнению с намеченным или желанный создателями проекта.
Во-первых, вам нужно исправить вашу переменную $ GOPATH. Soln: Установите его в базовый путь вашего проекта. Во-вторых, вам нужно определить точку входа в ваш проект. Обычно определяется с помощью "main".
Вот как при выполнении проекта понимается базовый рабочий каталог и рабочая точка вашей программы.
Ответ 13
Осторожнее при беге
export GOPATH=$HOME
Предположим, что ваш код существует в определенных местах, связанных с GOPATH
. Так что вместо этого вы можете использовать docker для запуска любой команды go:
docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang
И теперь вы можете использовать любую команду golang, например:
go test github.com/<organization name>/<repository name>
Ответ 14
Проблема в том, что вы находитесь не в каталоге пакета, в котором есть файл go с функцией go main, и go install не может найти команду (файл go с функцией go main), которую вы хотите установить.
$ cd /path/to/file-with-main-function.go
и затем запустите:
$ go install