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
:
的后果
- https://github.com/golang/go/issues/27093
- https://github.com/golang/go/issues/27925
- https://github.com/golang/go/issues/29278
这还没有完全解决。请记住,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
- 仅删除未使用的包并添加新版本。但是它不会删除旧的。
- 删除 go.sum : rm go.sum
- 重新生成go.sum:去mod整理
我最近开始在 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
:
- https://github.com/golang/go/issues/27093
- https://github.com/golang/go/issues/27925
- https://github.com/golang/go/issues/29278
这还没有完全解决。请记住,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
- 仅删除未使用的包并添加新版本。但是它不会删除旧的。
- 删除 go.sum : rm go.sum
- 重新生成go.sum:去mod整理