Перейти установить не удается с ошибкой: нет места установки для каталога 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