Установка пакетов в локальном каталоге

Какова наилучшая практика для установки пакетов (с 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