Go install всегда не удается установить каталог вне 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 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 и go был установлен с homebrew.

1237   10  

10 ответов:

когда вы не предоставляете аргументов 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, если вы держите свой исходный код).

для любых пользователей OS X и future me вам также нужно установить GOBIN чтобы избежать этого запутанного сообщения при установке и go get

mkdir bin 
export GOBIN=$GOPATH/bin

вы используете установить в каталоге за пределами папки GOPATH. Установите переменную gobin env или переместите src папка внутри GOPATH.

GOPATH/
     bin/
     src/
       go-statsd-client/

Подробнее: перейти построить исходный код строка 296

вам нужно настроить как GOPATH, так и GOBIN. Убедитесь, что вы сделали следующее (пожалуйста, замените ~/go на ваш предпочтительный GOPAH и впоследствии измените GOBIN). Это тестируется на Ubuntu 16.04 LTS.

экспорт GOPATH=~ / go

mkdir ~ / go / bin

экспорт GOBIN=$GOPATH / bin

выбранный ответ не решил проблему для меня.

вы хотите иметь 3 каталога внутри выбранного каталога GOPATH.

GOPATH
     /bin
     /src
       /someProgram
        program.go
       /someLibrary
        library.go
     /pkg

тогда ты побежишь go install изнутри либо someProgram (который помещает исполняемый файл в bin), либо someLibrary (который помещает библиотеку в pkg).

у меня была эта проблема на Windows.

моя проблема была в том, что мой %GOPATH% переменная окружения была установлена в

C:\Users\john\src\goworkspace

вместо

C:\Users\john\src\goworkspace\

добавление отсутствующей косой черты в конце исправило это для меня.

в моем случае (OS X) это было потому, что я установил GOPATH до /home/username/go (согласно книге) вместо /Users/username/go

для чего это стоит, вот мой .bash_profile, который хорошо работает для меня на mac с Atom, после установки go with Homebrew:

export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

Я на Windows, и я получил его, дав команду go help gopath к cmd, и прочитайте жирный текст в инструкции,

то есть если код, который вы хотите установить в ..BaseDir...\SomeProject\src\basic\set на GOPATH не должно быть того же места, что и код, это должен быть просто базовый проект DIR:..BaseDir...\SomeProject.

в переменной окружения GOPATH списки мест, где искать код. На Unix, значение-это строка, разделенная двоеточием. На Windows, значение через точку с запятой строка. На плане 9 значение представляет собой список.

если переменная окружения не задана, GOPATH по умолчанию имеет значение a подкаталог с именем "go" в домашнем каталоге пользователя ($HOME / go on Unix, %USERPROFILE%\go на Windows), если этот каталог не содержит Go распределение. Запустите "go env GOPATH", чтобы увидеть текущего ГОПАТА.

см.https://golang.org/wiki/SettingGOPATH чтобы установить пользовательский ГОПАТ.

каждый каталог, указанный в GOPATH, должен иметь предписанная структура:

каталог src содержит исходный код. Путь ниже src определяет импортируйте путь или имя исполняемого файла.

каталог pkg содержит установленные объекты пакета. Как в дереве, каждая целевая операционная система и архитектурная пара имеет свою собственную подкаталог pkg (pkg/GOOS_GOARCH).

если DIR-это каталог, указанный в GOPATH, пакет с исходным кодом в Каталог/ГНЦ именем/foo/бар могут быть импортированы как "foo/bar" и имеет его скомпилированная форма устанавливается в "DIR/pkg/GOOS_GOARCH/foo / bar.ля."

каталог bin содержит скомпилированные команды. Каждая команда имеет имя его исходный каталог, но только последний элемент, а не весь путь. То есть команда с исходным кодом в DIR / src/foo / quux устанавливается в DIR/bin/quux, а не DIR/bin/foo / quux. Префикс "foo/" лишен так что вы можете добавить DIR / bin в свой путь, чтобы добраться до установленного команды. Если переменная среды 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 был установлен в базовый проект DIR и все еще имеет эту проблему, в windows вы можете попробовать установить Гобин как Base Project DIR\bin или %GOPATH%\bin.

в windows мое окно cmd уже было открыто, когда я установил переменную среды GOPATH. Сначала мне пришлось закрыть cmd, а затем снова открыть его, чтобы он стал эффективным.

Comments

    Ничего не найдено.