Установка пакетов в локальном каталоге
Какова наилучшая практика для установки пакетов (с go get...
) в локальном каталоге?
Пример. Я хотел бы попробовать веб-фреймворк Revel, но я не хочу загромождать установку go на /usr/local/go
.
Обычно я бы сказал sudo go get github.com/robfig/revel
, как написано на домашней странице, но это установит его под /usr/local/go/src/pkg/...
.
Есть ли простой способ сказать (например) go get --local ...
и иметь пакет в текущей (вспомогательной) директории?
Ответы
Ответ 1
Вы можете экспортировать переменную env GOPATH
. Для меня это ~/local/lib/go
. Эта папка имеет вложенные папки bin
, pkg
и src
, поэтому это просто как /usr/local/go
. go
-tool автоматически загрузит, построит и установит пакеты в этот каталог.
Ответ 2
Чтобы расширить ответ на keks, вы можете обновить свой .bashrc, чтобы выглядеть так.
export GOROOT=/usr/local/go
export GOPATH=~/workspace/me/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
Теперь все пакеты, установленные с помощью go get
, отделены от дистрибутива go.
Ответ 3
Возможно, вы захотите использовать Go Version Manager (gvm).
Помимо переключения между версиями Go, он также позволяет переключаться между pkgsets ( "рабочие области" ).
Сначала вы создаете набор
gvm pkgset create myproject
а затем вы используете его
gvm pkgset use myproject
Работает как шарм.
Ответ 4
В современном модуле с включенным go (представлен в go 1.11) вы можете использовать программу gobin с env-переменной GOBIN, указывающей назначение двоичного файла:
GOBIN=./local gobin github.com/robfig/revel
Установка гобина производится так:
GO111MODULE=off go get -u github.com/myitcv/gobin