はじめに プロダクトセキュリティの文脈で、脆弱性のあるパッケージへの依存への対策を話し合っています。その中で https://pkg.go.dev/golang.org/x/crypto がさまざまなパッケージ経由で孫依存してるということが話題になりました。その流れでGolangにおけるパッケージの依存関係について改めて調べてみて、自身が勘違いしていたなという部分があったので紹介したいと思います。 最初に思っていた依存関係 パッケージmain,a,b が次のように依存しているとします。 パッケージmainのgo.mod にはa@v0.1.0 と b@v0.2.0が書かれている パッケージa のgo.mod にはb@v0.1.0 と書かれている この時、以下のような挙動になると誤解していました パッケージa はパッケージb@v0.1.0 を参照してビルドされる パッケージmain は1の生成

