私が歌川です

@utgwkk が書いている

Go Modulesを使いつつgo runで依存モジュールのCLIを実行したときに使われるバージョンは?

Go Modules Reference - The Go Programming Language を流し読みつつ手元でちょっと実験した感じだと、go.modに指定したバージョンになるようだった。

Module-aware commandsの節を見るとそのように読める。

In module-aware mode, the go command uses go.mod files to find versioned dependencies, and it typically loads packages out of the module cache, downloading modules if they are missing.

module-awareな場合の go run サブコマンドも、go.modからライブラリのバージョンを特定していそう。


いきなり話題が変わるけど、tools.go に依存ライブラリを列挙するのはGo公式のwikiでも紹介されている手法のようだった。How can I track tool dependencies for a module? という節で紹介されている。

Go製のツールはシングルバイナリで動くことが多く、おもむろにバイナリを落としてきたり、Homebrewに上がっているものを使ったりしがちだけど、ツールのバージョンがどんどん勝手に上がらないように管理したいときは固定するのが便利そう。