Go 模块:校验和不匹配

Go modules: checksum mismatch

我最近开始在 Go 中使用模块,但我经常遇到在一台机器上一切正常,但在另一台机器上构建代码库时遇到校验和不匹配的问题。

问题总是涉及相同的第三方依赖项 (github.com/ericlagergren/decimal):

go: verifying github.com/ericlagergren/decimal@v0.0.0-20181231230500-73749d4874d5: checksum mismatch
    downloaded: h1:HQGCJNlqt1dUs/BhtEKmqWd6LWS+DWYVxi9+Jo4r0jE=
    go.sum:     h1:x4oNpFLLl+8l+iLgksNHzZewTS0SKp6m0hlLwzXRbqA=

我尝试了各种方法:删除和重新生成 go.sum、将 Go 本身升级到最新的补丁版本并从 go.mod 中删除依赖项,但似乎没有任何方法可以解决此问题。

有人知道如何解决这个问题吗?

您使用的是哪个版本的 Go?您很有可能 运行 陷入 1.11.2 -> 1.11.4:

的后果

这还没有完全解决。请记住,go mod 仍在开发中,因此类似的事情可能会在 1.13 之前发生。

一定要仔细阅读 Go 的次要版本,以及这些事情 会如何 发生:https://github.com/golang/go/wiki/MinorReleases

TL;DR - Upgrade Go

您可以 运行 go clean -modcache 然后 go mod tidy 这将使用正确的校验和重新下载所有 dep(这会更新 $GOPATH/pkg/mod/ 中的 pkg 缓存)。

要更新 vendor/ 文件夹 运行:go mod vendor

我在使用 1.12.8 时遇到了同样的问题,缓存清理也无济于事。结果我仍然被困在 GOPATH 和 Mod 世界的中间。我在另一个 post () 中找到了一个标志,它对我有用。

go run -mod=vendor main.go

我遇到了同样的问题。我更新了 go 版本并删除了 go.mod 中的导入并删除了 go.sum 和 运行 中的所有条目 go mo tidy,它下载了所有依赖项而没有任何问题。

您需要从 go.sum 文件中删除您的包。 如果您从终端模式 运行,使用 CI/CD 或 Dockerfile,您可以使用 sh 命令:

sed '/^github.com\/ericlagergren\/decimal@/d' ./go.sum > temp.txt && mv temp.txt go.sum

其中:

  • sed - unix 应用程序
  • '/^ - 从
  • 开始行
  • github.com\/hyperledger\/fabric v1.4.4 - 你的包名(实际上是RegEX行,屏蔽/\)
  • /d' - 表示删除行
  • go.sum - 我们的 golang sum 文件
  • > temp.txt - 将输出保存到临时文件
  • mv temp.txt go.sum - 用临时文件
  • 重写我们的go.sum

P.S.: go mod tidy - 仅删除未使用的包并添加新版本。但是它不会删除旧的

  1. 删除 go.sum : rm go.sum
  2. 重新生成go.sum:去mod整理