20

我最近开始在 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但似乎没有任何东西可以解决这个问题。

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

4

6 回答 6

35

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

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

于 2019-02-27T07:57:43.823 回答
12

您使用的是哪个版本的 Go?您很有可能会遇到以下情况1.11.2 -> 1.11.4

这仍然没有完全解决。请记住,go mod它仍在开发中,所以这样的事情可能会在 1.13 之前发生。

请务必阅读 Go 的次要版本,以及这些事情是如何发生的:https ://github.com/golang/go/wiki/MinorReleases

TL;DR - 升级 Go

于 2019-01-10T17:32:02.667 回答
12
  1. 删除 go.sum : rm go.sum
  2. 重新生成 go.sum : go mod tidy
于 2021-03-10T16:46:08.190 回答
0

我在使用 1.12.8 时遇到了同样的问题,并且没有缓存清理会有所帮助。原来我仍然被困在 GOPATH 和 Mod 世界的中间。我在另一篇文章(如何从 Dep 迁移到 Go 模块)中找到了一个标志,它对我有用。

go run -mod=vendor main.go
于 2019-08-28T19:13:37.587 回答
0

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

于 2020-11-18T11:45:47.410 回答
0

您需要从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

PS:go mod tidy- 仅删除未使用的软件包并添加新版本。但它不会删除 olds

于 2020-12-08T14:54:18.973 回答