Ответ
В экосистеме Go под "реестром" чаще всего понимают Go Module Proxy — сервер, который выступает посредником между разработчиком и исходным кодом зависимостей (например, на GitHub). Он решает несколько ключевых задач: надежность, скорость и безопасность сборок.
Основные компоненты и понятия:
-
Публичные реестры (официальные сервисы Go):
proxy.golang.org
: Официальный прокси-сервер модулей, используемый по умолчанию. Он кэширует публичные модули, гарантируя их доступность, даже если оригинальный репозиторий будет удален или станет недоступен.sum.golang.org
: База данных контрольных сумм (checksum database). Она хранит криптографические хэши для каждой версии модуля, что позволяет командеgo
верифицировать целостность загружаемых зависимостей и защититься от их подмены.
-
Настройка через переменные окружения:
GOPROXY
: Позволяет указать URL прокси-сервера. Значение по умолчанию —https://proxy.golang.org,direct
. Ключевое словоdirect
означает, что если модуль не найден в прокси,go
попытается скачать его напрямую из системы контроля версий.GOPRIVATE
,GONOPROXY
,GONOSUMDB
: Эти переменные используются для работы с приватными репозиториями. Они указывают шаблоны путей модулей, которые не должны запрашиваться через публичный прокси и базу данных контрольных сумм.- Пример:
GOPRIVATE=*.corp.example.com
- Пример:
-
Приватные реестры:
- Компании могут разворачивать собственные прокси-серверы для хостинга внутренних, приватных модулей. Популярные решения: JFrog Artifactory, Nexus Repository, Athens.
- Это позволяет контролировать зависимости и управлять доступом внутри организации.
-
Директива
replace
вgo.mod
:- Хотя это не реестр, директива
replace
является важным инструментом управления зависимостями. Она позволяет заменить требуемый модуль на другую версию или на локальную копию, что крайне полезно для локальной разработки и отладки.
module example.com/myapp go 1.18 require ( github.com/some/dependency v1.2.3 ) // Заменяем зависимость на локальную копию для отладки replace github.com/some/dependency v1.2.3 => ../../local/dependency
- Хотя это не реестр, директива