Skip to content
Опубликовано: 2022-01-25
Обновлено: 2022-01-25
Теги: go golang git

Использование приватных модулей в 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/

Дополнительная информация