В стартовый набор входят proxy-репозиторий go-proxy (зеркало proxy.golang.org), hosted-репозиторий go-hosted (приватные модули) и go-sumdb — proxy-репозиторий базы контрольных сумм sum.golang.org.

Подключение к proxy

Задайте переменные окружения (или запишите их командой go env -w):

export GOPROXY="https://<GALLEON_HOST>/repository/go-proxy"
export GOSUMDB="sum.golang.org https://<GALLEON_HOST>/repository/go-sumdb"
go get rsc.io/quote

GOSUMDB записывается двумя значениями через пробел — имя базы и адрес proxy-репозитория: клиент go будет проверять контрольные суммы через Galleon, не обращаясь в интернет напрямую.

Приватные модули

Приватные модули публикуются в go-hosted, публичные продолжают идти через go-proxy — для этого источники перечисляются в GOPROXY списком (при ответе 404 клиент переходит к следующему адресу):

export GOPROXY="https://<GALLEON_HOST>/repository/go-hosted,https://<GALLEON_HOST>/repository/go-proxy"
export GOPRIVATE="example.com/private-*"
export GONOPROXY="none"
go mod download example.com/private-x/lib@v1.0.0

Приватных модулей нет в публичной базе контрольных сумм, поэтому GOPRIVATE отключает для их путей проверку сумм.

GONOPROXY="none" обязателен: без него GOPRIVATE направит запросы приватных модулей напрямую в систему контроля версий, минуя Galleon.

Учётные данные клиент go читает из файла ~/.netrc:

machine <GALLEON_HOST>
login <USERNAME>
password <PASSWORD>

Публикация

Штатной команды публикации у Go нет — файлы модуля загружаются по путям протокола module proxy:

curl -u <USERNAME>:<PASSWORD> -T v1.0.0.mod https://<GALLEON_HOST>/repository/go-hosted/example.com/foo/@v/v1.0.0.mod
curl -u <USERNAME>:<PASSWORD> -T v1.0.0.zip https://<GALLEON_HOST>/repository/go-hosted/example.com/foo/@v/v1.0.0.zip

Файл .mod должен байт в байт совпадать с go.mod внутри архива .zip. Повторная загрузка уже опубликованной версии отклоняется с кодом 409 — версии модулей неизменяемы; для новой сборки публикуйте новую версию.

Особенности

Особенности формата:

  • Файлы версий (.zip, .mod, .info) неизменяемы по правилам протокола Go; как proxy-репозитории кешируют содержимое и обновляют списки версий, описано в разделе Проксирование и кеширование.
  • Если GOSUMDB не настроен на go-sumdb, клиент проверяет контрольные суммы напрямую через sum.golang.org — для закрытого контура настраивайте обе переменные.