Использование приватных модулей в Go
Если разработка ведется в приватном репозитории, то подключение модулей из этого репозитория не дает нужного эффекта: go не может их оттуда скачать.
Для решения этой проблемы можно воспользоваться специальными переменными окружения.
Установка переменных окружения
Можно воспользвать переменной GOPRIVATE
, в которую передается список
разделенных запятой(,
) строк в формате регулярных выражений(синтаксис для
path.Match
):
GOPRIVATE="*.company.tld,github.com/company"
Для более гибкого контроля за скачиванием и проверкой контрольных сумм
модулей можно использовать переменные GONOPROXY
и GONOSUMDB
. Они
принимают такой же список как и GOPRIVATE и имеют больший приоритет над его
значениями. Тем самым можно указывать для каких модулей не использовать
проксирование, а для каких не проверять контрольные суммы.
Взяли пример на сайте https://goproxy.io/docs/GOPRIVATE-env.html. Если в компании используется прокси для предоставления приватных модулей, то нужно сделать конфигурацию:
GOPRIVATE=*.corp.example.com
GOPROXY=proxy.example.com
GONOPROXY=none
Эта конфигурация сообщает go и различным его утилитам, что модули
начинающиеся с поддомена corp.example.com
являются приватными, но
прокси-сервис компании должен использоваться и для приватных и для публичных
модулей, потому что GONOPROXY
был установлен в значение, при котором не
совпадает ни один модуль и тем самым переписывается значение GOPRIVATE
.
Использование ssh вместо http
go install
и go get
при обращении к модулям пытаются получить их через
git по http. Поэтому надо поправить конфигурацию git, чтобы он всегда
использовал доступ по ssh вместо http. Надо добавить в ~/.gitconfig
:
[url "ssh://[email protected]:22/"]
insteadOf = https://git.company.tld/