September 19, 2021

GOPROXY

Начиная с версии Go 1.13, стандартный менеджер пакетов в Go - это Go modules. Вместе с ним появилась переменная окружения GOPROXY, которая определяет, откуда будут скачиваться пакеты.

Посмотреть текущую конфигурацию:

~ ❯ go env GOPROXY
https://proxy.golang.org,direct

В переменной GOPROXY будут указываться источники через запятую, откуда go будет пытаться скачать необходимый пакет. Если первый источник ответит 4xx, то go попробует скачать пакет по следующей ссылке.

Direct указывает, что код надо загрузить по прямой ссылке из VCS. То есть ровно по той ссылке, как пакет импортируется в коде.

Однако, загружать пакеты с VCS может быть не всегда безопасно.

Кто-то может внести вредоносный код в новых коммитах, или даже если вы строго зафиксировали версию пакета, с которым хотите работать, злоумышленник может изменить текущую версию кода через  git push --force

Сейчас по умолчанию в GOPROXY устанавливается https://proxy.golang.org как прокси и работает как кеш. То есть если в proxy.golang.org нужного пакета не найдется, то он его скачает и сразу же отдаст нам. Этот кеш гарантирует, что код не будет изменен.

Источники:

https://golang.org/ref/mod#goproxy-protocol

https://jfrog.com/blog/why-goproxy-matters-and-which-to-pick/