Кому полезно: командам и инженерам, которые на удалённом Mac или общем раннере постоянно гоняют go mod download и упираются в задержку до прокси или в политику контрольных сумм. В статье: матрица решений «свой прокси модулей» против публичной цепочки GOPROXY, таблица переменных (GOPRIVATE, GONOPROXY, GOSUMDB, GOMODCACHE и др.) и готовые export для CI. Без дублирования тем npm/Homebrew/SPM — только экосистема Go. Навигация без входа: главная, список блога; см. также матрицу uv/PyPI для соседнего стека.
  • Цепочка «ломается» на первом хопе: региональное зеркало отвечает медленно или отдаёт 5xx, а до direct или второго прокси очередь не доходит из‑за неверного порядка в GOPROXY или запрета на финальный источник.
  • Утечка приватных путей: внутренние модули уходят в публичный кеш, потому что vanity‑импорты не попали в GOPRIVATE или GONOPROXY не совпадает с реальными префиксами путей.
  • Диск и блокировки кеша: общий GOMODCACHE на медленном томе или без политики очистки даёт всплески IO и непредсказуемое время холодного go test при параллельных job.

① Матрица: свой прокси модулей и публичная цепочка GOPROXY

Используйте таблицу до правок launchd, shell‑профилей или YAML CI. Цель — предсказуемая задержка первого байта и дисциплина checksum для публичных зависимостей, а не «какой прокси ответил первым».

В GOPROXY значения разделяются запятой или |: при запятой инструмент перебирает прокси по очереди до успешного ответа; direct означает обход прокси к исходному VCS, off — полный отказ от сетевых прокси (осторожно в CI). Для трансграничных раннеров часто выгоден ближайший к машине первый хоп, а не «самый известный» глобальный URL — измерьте задержку с самого Mac, а не с ноутбука разработчика.

Подход Когда уместен Риски на удалённом Mac CI
Свой прокси (Athens, goproxy и т.п.) Нужен кеш в периметре, снимок zip для аудита, буфер при сбоях апстрима или политика «только разрешённые модули» Сами ведёте квоты диска, TLS, бэкапы; нужен план failover (вторая нода, DNS, healthcheck)
Публичная цепочка (корп. зеркало, регион, proxy.golang.org, direct) Мало сил на сопровождение и допустим исходящий трафик к глобальной инфраструктуре Упорядочивайте хопы по комплаенсу и RTT; direct в конце только если разрешён доступ к VCS из раннера
Гибрид Публичные модули идут через цепочку, приватные — напрямую во внутренний Git или отдельный сегмент прокси Строго согласуйте GONOPROXY с каждым приватным префиксом; DNS Git должен совпадать на всех раннерах

На Apple Silicon выгодно держать GOMODCACHE на локальном NVMe: модули — это мелкие zip и метаданные; узкое место редко в CPU.

② Таблица параметров: GOPROXY, приватность, sumdb и каталоги

Задавайте на уровне job, пула машин или репозитория. Пути подставьте свои; секреты не печатайте в логах шагов.

Переменная Роль Пример или шаблон
GOPROXY Упорядоченный список прокси модулей; перебор слева направо до успеха https://go.corp.example,https://proxy.golang.org,direct
GOPRIVATE Префиксы, для которых меняется поведение прокси/sumdb (приватность) github.com/myorg/*,*.corp.example
GONOPROXY Префиксы, которые не должны ходить через записи GOPROXY Часто дублирует GOPRIVATE для внутреннего Git
GONOSUMDB Префиксы без обращения к checksum DB Приватные модули без публичного sumdb
GOSUMDB Сервис контрольных сумм для публичных модулей; off только по регламенту sum.golang.org или URL внутреннего sum
GOMODCACHE Каталог скачанных модулей (исходники и zip) /usr/local/ci/gomod-shared или подкаталог с CI_PIPELINE_ID
GOPATH (наследие) Влияет на рабочие пути вне чистого modules‑режима Не смешивайте с GOMODCACHE без необходимости
GOFLAGS Глобальные флаги, напр. -mod=readonly в CI -mod=readonly при закоммиченном go.sum

Другие гайды по ускорению загрузок на MacPull: Git и слои Docker (образы и реестры), Rust Cargo — отдельные цепочки зеркал и lockfile.

③ Исполняемая настройка: пять шагов для воспроизводимых загрузок

1
Выровнять toolchain. Одинаковый go version на раннерах стабилизирует go.sum и смысл -mod=readonly.
2
Сначала приватные пути. Экспортируйте GOPRIVATE и GONOPROXY, затем в том же shell выполните go env GOPRIVATE GONOPROXY в CI‑логе (без секретов).
3
Собрать цепочку. Начните с ближайшего разрешённого зеркала, добавьте запасной прокси, затем proxy.golang.org или direct по политике.
4
Зафиксировать sumdb. Для публичного кода оставьте GOSUMDB; если используете off, оформите исключение в документации пайплайна.
5
Изолировать кеш. Быстрый локальный диск для GOMODCACHE; раздельные пулы при смешении регламентированного и публичного кода; план prune.

Пример пролога для CI (подставьте свои хосты):

export GOPROXY="https://go.corp.example.com,https://proxy.golang.org,direct"
export GOPRIVATE="github.com/myorg/*,go.corp.example/*"
export GONOPROXY="github.com/myorg/*,go.corp.example/*"
export GONOSUMDB="github.com/myorg/*,go.corp.example/*"
export GOSUMDB="sum.golang.org"
export GOMODCACHE="${HOME}/.cache/go-mod-${CI_PIPELINE_ID:-local}"
export GOFLAGS="-mod=readonly"
mkdir -p "$GOMODCACHE"

Проверка перед тяжёлыми тестами: go env | grep -E 'GOPROXY|GOPRIVATE|GOSUMDB|GOMODCACHE' и go list -m all.

④ Короткий чеклист для дизайн‑доков и ревью

Задержка до первого байта от первого прокси в цепочке часто важнее «мощности CPU» при большом числе мелких модулей — снимите TTFB по каждому хопу.

GOFLAGS=-mod=readonly мешает случайно переписать граф зависимостей в середине PR в регламентированных пайплайнах.

Место на диске: закладывайте запас под GOMODCACHE вместе с образами Docker и артефактами, чтобы параллельные job не забивали корневой том APFS.

Итог

Свой прокси модулей выбирайте при необходимости хранить zip в периметре, аудировать поставки или переживать кратковременные отключения апстрима. Публичную цепочку GOPROXY — когда допустим внешний egress и мало ресурса на сопровождение. Всегда согласуйте GOPRIVATE с GONOPROXY, держите осмысленную политику GOSUMDB для публичного кода и закрепите GOMODCACHE на быстром диске каждого удалённого Mac в пуле.

Нужен выделенный Apple Silicon рядом с вашим регионом для стабильного CI: откройте тарифы, оформите покупку или загляните в центр помощи — чтение без входа.

Дальше по инфраструктуре раннера: FAQ пула Mac: параллельные загрузки и диск; вернуться к оглавлению блога.

Удалённый Mac для Go CI и частых mod download

Выделенные Mac mini, SSH, быстрый SSD и предсказуемый egress под вашу цепочку GOPROXY. Тарифы, покупка и документация доступны без регистрации.