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 и создаю новую оболочку, он также работает.