Go 1.13 モジュールミラーリングサーバーとチェックサム DB
Golang
Lastmod: 2020-10-19

Go 1.13 より、Go モジュール関連のサポートが強化された。主な機能は以下の2つ。

  • パッケージをより高速にインストール可能なミラーリングサーバの設定

  • モジュールの信頼性を向上するチェックサム機構

依存モジュールのミラーリング

Go 1.13 では、モジュールリポジトリのミラーリングサーバーを指定できるようになった。 GOPROXY にミラーリングサーバーの URL を指定することで、指定したサーバーにキャッシュが置かれ、go get などを実行した際にミラーリングサーバーのキャッシュをインストールするようになる。

Go 1.13 での GOPROXY のデフォルト値は以下のようになっている。

GOPROXY="https://proxy.golang.org,direct"

proxy.golang.org は Google が提供するミラーサーバー。 direct を設定した場合、ミラーサーバーを介さず直接リポジトリからインストールする。

もし、一部のモジュールをキャッシュさせたくない場合には、 GOPRIVATE にモジュールリポジトリ URL を設定する。

$ go env -w GOPROXY=github/hoge/fuga

また、ミラーリングそのものを避けたい場合はミラーリングdirect を指定すれば無効化できる。

$ go env -w GOPROXY=direct

モジュールのチェックサム検査機構

Go 1.11 より、 go.sum ファイルに依存パッケージのチェックサム一覧が書かれるようになった。これにより、 go get などでパッケージをインストールした際、ダウンロードされたパッケージのチェックサムと比較することでパッケージの改ざん検出を行う。

Go プロジェクトを新規に作成したとき、 go.sum にはチェックサムはなく、改ざん検出も行えない。これを防ぐため、Go モジュールのチェックサムを保存する DB にチェックサムを問い合わせる。

チェックサム保存先 DB は GOSUMDB に設定する。デフォルト値は GOPROXY 同様公式が提供する DB サーバー URL になる。

GOSUMDB="sum.golang.org"

ただしチェックサム DB の URL を設定していると、 パッケージインストール時に

  • チェックサム検査
  • go.sum にチェックサムがない場合、チェックサムを DB に問い合わせ
  • なければ 410 Gone となり、パッケージがインストールできない。

これはプライベートなリポジトリに Go モジュールを管理している場合などに発生する。そのようなモジュールを扱う場合、 GOPRIVATE にそのリポジトリを設定するか、 GOSUMDBoff を設定する。

$ go env -w GOSUMDB=off

参考文献

Module Mirror and Checksum Database Launched - The Go Blog

Go モジュールのミラーリング・サービス【正式版】 — プログラミング言語 Go | text.Baldanders.info