https://zenn.dev/ryo_yamaoka/articles/595cf9e69229f9

はじめに

先日、利用しているモジュール(外部ライブラリー)に脆弱性があることが発覚しました。その対処を行った際にgo moduleや go.mod, go.sumの理解がやや曖昧で記述内容や挙動に振り回されたことがあったので色々調べた知見を忘れないようメモしておこうと思います。

この記事に書かないこと

下記のような事柄は既存の記事が沢山あるので省略します。

前提となる環境

Go1.16, 1.17でgo modules周りの挙動がかなり変わっているので古いバージョンで試すと記事の通りにならない可能性が高いです

go.mod

主にモジュールのインポートパスとバージョン情報を書いておくためのファイルで、いくつかのディレクティブを使ってアプリケーションがどのような依存関係を持っているか記述しておきます。

go mod tidy等を実行するとこのファイルを元に依存先を取得し次項で解説するgo.sumを生成します。

サンプル

module github.com/ryo-yamaoka/sample-lib

go 1.17

require github.com/ryo-yamaoka/direct-dependent-lib v0.0.2

require github.com/ryo-yamaoka/indirect-dependent-lib v0.0.4 // indirect

exclude github.com/ryo-yamaoka/direct-dependent-lib v0.0.1

replace github.com/xxx/abandoned => github.com/ryo-yamaoka/forked

retract (
    // include vulnerability CVE-xxxx
    v0.0.1
    // has fatal bug xxx
    v0.0.2
)

上記サンプルからは以下のことが読み取れます。