🚿
Golangで不要なmoduleを削除したい
go mod でパッケージをインストールしたけど、削除したい。
結論
2ステップで削除できます。
- moduleをimportしているコードを削除。
-
go mod tidy
コマンドを実行。
Iterm
go mod tidy
詳しく
go mod tidy
コマンドでは、モジュール内の全てのパッケージのビルドタグの組み合わせを確認するので、安全に不要なモジュールを削除することができます。
一方で、gobuildやgotestでは、不要なパッケージの削除はされません。ビルド時に単一のパッケージのロードしか行われず、使用されていないパッケージを知ることができないためです。
検証
rsc.io/quote v1.5.2
が重複して、requireされていることを確認。
$ go list -m all
example.com/hello
golang.org/x/text v0.3.0
rsc.io/quote v1.5.2
rsc.io/quote/v3 v3.1.0
rsc.io/sampler v1.3.1
$ cat go.mod
module example.com/hello
go 1.12
require (
golang.org/x/text v0.3.0 // indirect
rsc.io/quote v1.5.2
rsc.io/quote/v3 v3.0.0
rsc.io/sampler v1.3.1 // indirect
)
go mod tidy
で、rsc.io/quote v1.5.2
が削除されることを確認。
After
$ go mod tidy
$ go list -m all
example.com/hello
golang.org/x/text v0.3.0
rsc.io/quote/v3 v3.1.0
rsc.io/sampler v1.3.1
$ cat go.mod
module example.com/hello
go 1.12
require (
golang.org/x/text v0.3.0 // indirect
rsc.io/quote/v3 v3.1.0
rsc.io/sampler v1.3.1 // indirect
)
番外編 go mod tidyで消したくない module がある場合
参考
Discussion