"go mod tidy" 与 "go build" 的行为
Behaviour of "go mod tidy" vs "go build"
假设我有一个具有以下结构的项目:
+-- app/
+-- otherstuff/
+-- test/
+-- go.mod
+-- go.sum
+-- main.go
我可以通过 运行ning go mod tidy
:
确保 go.mod
不包含未使用的依赖项
# 1) Verify that no dependency containing the name "modern-go" is found on go.mod
$ grep 'modern-go' go.mod
<-- Empty (nothing found) (OK)
# 2) Run "go mod tidy", verify that nothing changes (i.e. go.mod is already clean)
$ go mod tidy -v
unused github.com/modern-go/concurrent
unused github.com/modern-go/reflect2
<-- messages above are displayed, but go.mod did not change
# 3) Verify that go.mod did not change
$ grep 'modern-go' go.mod
<-- Empty (nothing found) (OK)
现在,如果我 运行 go build
、go.mod
得到更新:
# 4) Run "go build"
$ go build
# 5) go.mod was updated by "go build":
$ grep 'modern-go' go.mod
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
我不知道这里发生了什么。我预计 go mod tidy
会让 go.mod
处于干净状态,因此 运行ning go build
不会改变它。
有什么想法吗?
您期望的行为通常是正确的。
Go 1.13 在这方面有一些修复。我建议尝试一下:
假设我有一个具有以下结构的项目:
+-- app/
+-- otherstuff/
+-- test/
+-- go.mod
+-- go.sum
+-- main.go
我可以通过 运行ning go mod tidy
:
go.mod
不包含未使用的依赖项
# 1) Verify that no dependency containing the name "modern-go" is found on go.mod
$ grep 'modern-go' go.mod
<-- Empty (nothing found) (OK)
# 2) Run "go mod tidy", verify that nothing changes (i.e. go.mod is already clean)
$ go mod tidy -v
unused github.com/modern-go/concurrent
unused github.com/modern-go/reflect2
<-- messages above are displayed, but go.mod did not change
# 3) Verify that go.mod did not change
$ grep 'modern-go' go.mod
<-- Empty (nothing found) (OK)
现在,如果我 运行 go build
、go.mod
得到更新:
# 4) Run "go build"
$ go build
# 5) go.mod was updated by "go build":
$ grep 'modern-go' go.mod
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
我不知道这里发生了什么。我预计 go mod tidy
会让 go.mod
处于干净状态,因此 运行ning go build
不会改变它。
有什么想法吗?
您期望的行为通常是正确的。
Go 1.13 在这方面有一些修复。我建议尝试一下: