Goのモジュールを個別に更新する
特に問題なければ go get -u ./...
で全て更新してしまうのが楽ですが、更新できないモジュールがある場合は個別に更新する必要があります。
go list -m -u all
で全モジュールとその更新有無を確認できるため、 -f
でgo getコマンドを出力するようにし、必要なものだけ実行すると楽です。
例えばgoplsはそのまま実行すると以下のようになりますが、
$ go list -m -u all golang.org/x/tools/gopls github.com/BurntSushi/toml v0.4.1 github.com/davecgh/go-spew v1.1.1 github.com/google/go-cmp v0.5.6 github.com/google/safehtml v0.0.2 github.com/jba/templatecheck v0.6.0 github.com/kr/pretty v0.1.0 [v0.3.0] github.com/kr/pty v1.1.1 [v1.1.8] github.com/kr/text v0.1.0 [v0.2.0] github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e github.com/pmezard/go-difflib v1.0.0 github.com/rogpeppe/go-internal v1.8.0 github.com/sanity-io/litter v1.5.1 github.com/sergi/go-diff v1.1.0 [v1.2.0] github.com/stretchr/objx v0.1.0 [v0.3.0] github.com/stretchr/testify v1.4.0 [v1.7.0] github.com/yuin/goldmark v1.4.1 [v1.4.4] golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 [v0.0.0-20211108221036-ceb1ce70b4fa] golang.org/x/mod v0.5.1 golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f [v0.0.0-20211112202133-69e39bad7dc2] golang.org/x/sync v0.0.0-20210220032951-036812b2e83c golang.org/x/sys v0.0.0-20211019181941-9d821ace8654 [v0.0.0-20211113001501-0c823b97ae02] golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 [v0.0.0-20210927222741-03fcf44c2211] golang.org/x/text v0.3.7 golang.org/x/tools v0.1.7 => ../ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 [v1.0.0-20201130134442-10cb98267c6c] gopkg.in/errgo.v2 v2.1.0 gopkg.in/yaml.v2 v2.2.4 [v2.4.0] honnef.co/go/tools v0.2.1 [v0.2.2] mvdan.cc/gofumpt v0.1.1 [v0.2.0] mvdan.cc/xurls/v2 v2.3.0
更新があり、直接使っている(not .Indirect)モジュールのgo getコマンドを生成すると以下のようになります。
$ go list -m -u -f '{{if (and .Update (not .Indirect))}}go get {{.Path}}@{{.Update.Version}}{{end}}' all go get github.com/sergi/go-diff@v1.2.0 go get golang.org/x/sys@v0.0.0-20211113001501-0c823b97ae02 go get honnef.co/go/tools@v0.2.2 go get mvdan.cc/gofumpt@v0.2.0