golang: go install try/usr/local вместо GOPATH

Это, в некоторой степени, продолжение моего последнего вопроса: golang: установка пакетов в локальном каталоге

У меня GOPATH установлен в $HOME/prog/go/gopath и этот путь существует с тремя каталогами:

~/prog/go/gopath$ ls
bin  pkg  src

Теперь я пытаюсь установить модуль для доступа к базе данных redis, которая просит меня запустить

go install

внутри исходного каталога. Но команда go install дает мне

~/prog/go/gopath/src/redis (go1)$ go install
go install flag: open /usr/local/go/pkg/darwin_amd64/flag.a: permission denied
~/prog/go/gopath/src/redis (go1)$ echo $GOPATH 
<myhomedir>/prog/go/gopath

(где <myhomedir> - допустимый путь)

Вопрос 1: почему go install не принимает во внимание $GOPATH? Вопрос 2: как убедить go install использовать $GOPATH?

Ответ 1

Не знаете, как вы настраиваетесь, но возможно, что он должен создавать пакеты из библиотеки std, но не может из-за разрешений. Можешь попробовать

cd /usr/local/go/src
sudo ./all.bash

Это должно построить библиотеку std и запустить тесты, чтобы убедиться, что все в порядке.

Убедитесь, что у вас есть надлежащие разрешения на чтение и выполнение из $ GOROOT по мере необходимости. Лично я просто загружаю архив с golang.org и держу его под ~/local/go и соответствующим образом устанавливаю GOROOT.

Ответ 2

Аналогичные проблемы здесь. Когда я проверю свой $ GOROOT, я обнаружил, что все библиотеки уже построены там. Но по некоторым причинам он пытается перестроить все библиотеки. Поэтому я просто делаю небольшой трюк:

find /usr/lib/go/pkg/ -name "*.*" | sudo xargs touch

Тогда все работает нормально.

Ответ 3

Я думаю, что вам нужна команда "go get":

go get github.com/alphazero/Go-Redis

загрузит библиотеку Go-Redis и поместит ее в каталог $ GOPATH/src.

go install выполняет компиляцию и установку на ваш собственный исходный код.

Должен признаться, я немного боролся со всей этой концепцией, но тщательное перечитание " Как написать Go " и раздел организации кода содержит то, что вам нужно знать о том, как работает команда go.

Ответ 4

Решение - удалить GOROOT из вашего.bash_profile. Затем команда go установит его в ваш каталог GOPATH. И так странно: когда я снова устанавливаю GOROOT в свой.bash_profile и создаю новую оболочку, он также работает.