当我的 go.sum 已经以这种方式检查过时,这个差异是什么?

What is this diff in my go.sum when it has already been checked in this way?

我经常看到 go.sum 变化与此差异:

+github.com/owner/pkg v0.0.0-abc h1:$hash
 github.com/owner/pkg v0.0.0-abc/go.mod h1:$hash

这是什么?当模块最初被列为依赖项时,为什么第一行没有成为提交的一部分?它一直在发生,我什至不确定它是什么?

第一行给出模块 github.com/owner/pkg 完整源代码 的校验和,版本 v0.0.0-abc

第二行仅给出 go.mod 文件的校验和 模块 github.com/owner/pkg 在版本 v0.0.0-abc.

如果你只有第二行而不是第一行,这意味着你的模块的依赖项在版本 v0.0.0-abc 满足 github.com/owner/pkg 的版本要求,但到目前为止你所做的一切实际上都不在乎关于相应的源代码。

一般来说,您应该会发现 go mod tidy 根据需要添加或删除源代码的校验和。

但是,请注意(即将发布的)Go 1.16 之前的 go 命令版本有一个错误,有时它们还会为源代码保留不需要的校验和。 (有关详细信息,请参阅 https://golang.org/issue/33008。)