TL;DR
Go チームが提供し、Google が運用するモジュールのミラー(proxy.golang.org)。Go 1.13 以降、go コマンドは既定でこのミラーとチェックサムデータベース(sum.golang.org)を使う。
なぜ必要か
ミラーはモジュールをキャッシュするので、元のリポジトリからリリースが消えても、ビルドが壊れないように中身を配布し続けられる。
仕組み
go コマンドはモジュールを VCS から直接ではなく、ミラーから取得する。ミラーは取得したモジュールをキャッシュし、最近アクセスされた情報は期限が切れる前に更新する。取得したモジュールが正しいかは、追記のみで改ざんできない透明性ログであるチェックサムデータベースで確かめる。問い合わせで送られるのは、モジュールのパスとバージョンだけである。
作者がミラーに登録やアップロードをする必要はない。How Go Mitigates Supply Chain Attacks によると、Go にはパッケージリポジトリのアカウントがなく、ミラーはあくまでプロキシなので、攻撃対象になるアカウントが VCS の 1 つで済む。
注意点
ミラーが読めるのは公開されたソースコードだけである。非公開のモジュールは GOPRIVATE にパターンを設定しないと、ミラーに問い合わせて失敗する。ミラーを使わないときは GOPROXY=direct を設定する。
適切なライセンスが見つからないモジュールは一時的にしかキャッシュされず、取得できなくなることがある。逆に、一度キャッシュされた中身は元のリポジトリで書き換えても変わらない。サプライチェーン攻撃に学ぶmoduleの仕組みとセキュリティ対策 では、この性質を悪用し、悪意のあるバージョンをキャッシュさせたあとで GitHub のタグを書き換えた攻撃が紹介されている。