https://zenn.dev/ryo_yamaoka/articles/595cf9e69229f9
先日、利用しているモジュール(外部ライブラリー)に脆弱性があることが発覚しました。その対処を行った際にgo moduleや go.mod
, go.sum
の理解がやや曖昧で記述内容や挙動に振り回されたことがあったので色々調べた知見を忘れないようメモしておこうと思います。
下記のような事柄は既存の記事が沢山あるので省略します。
Go1.16, 1.17でgo modules周りの挙動がかなり変わっているので古いバージョンで試すと記事の通りにならない可能性が高いです
主にモジュールのインポートパスとバージョン情報を書いておくためのファイルで、いくつかのディレクティブを使ってアプリケーションがどのような依存関係を持っているか記述しておきます。
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
)
上記サンプルからは以下のことが読み取れます。
github.com/ryo-yamaoka/sample-lib