为什么go模块版本有时需要go.sum中的两行

为什么go模块版本有时需要go.sum中的两行,go,go-modules,Go,Go Modules,为什么单个模块版本有时需要在go.sum中使用两行代码 一行仅用于模块版本(v0.1.1在下面的示例中) 一行还将/go.mod钉在版本上(v0.1.1/go/mod,在下面的示例中) 例如: github.com/foo/bar v0.1.1 h1:kDgnGXZpvZUi7ym6Rm23yVn3gRqBag+vU6M/wytZR9c= github.com/foo/bar v0.1.1/go.mod h1:MZcarCLffCxoj/EF1yhRb4HvOSmCkm5Z8FPmzWrMG

为什么单个模块版本有时需要在
go.sum
中使用两行代码

  • 一行仅用于模块版本(
    v0.1.1
    在下面的示例中)
  • 一行还将
    /go.mod
    钉在版本上(
    v0.1.1/go/mod
    ,在下面的示例中)
例如:

github.com/foo/bar v0.1.1 h1:kDgnGXZpvZUi7ym6Rm23yVn3gRqBag+vU6M/wytZR9c=
github.com/foo/bar v0.1.1/go.mod h1:MZcarCLffCxoj/EF1yhRb4HvOSmCkm5Z8FPmzWrMG+g=
我问这个问题的原因是,有时当我
go-get
一个包时,在
go.sum
中只使用上面示例中的第二行生成一个间接依赖项,然后在
410 gone
的情况下,构建将失败package@version. 但是,如果我手动
go
获取间接依赖项,则构建不会再因
410消失而失败


我相信这只会发生在私有存储库中,所以我知道sum.golang.org不会很好地使用它。但是,我想知道是否有可能首先避免使用410,特别是在自动模块更新等方面。

请阅读中的go.sum部分。v0.1.1/go.mod是go.mod文件本身的哈希,而另一个是“源代码”。你看到的问题与两行文字无关。谢谢@Volker的回复。对不起,我的问题不清楚。我理解这两条线之间的区别。但是我不明白为什么
go-get
获取的信息不足以构建间接依赖,但是如果我
go-get
直接获取间接依赖,它将获取足够的信息来执行构建。有趣的是,即使不是由一行出现直接导致的,问题也确实是由两行出现解决的,因此我的问题的措辞是。
go-get
默认情况下将获得最新版本,这可能与依赖项所需的版本不同。如果没有看到失败的确切命令,我们无法真正帮助您。这可能是
go
命令中的错误。如果您仍然在《go1.16rc1》中看到它,请在上打开一个新版本(包含复制步骤)。