【问题标题】:Go modules: checksum mismatchGo 模块:校验和不匹配
【发布时间】:2019-06-05 14:58:52
【问题描述】:

我最近开始在 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 go-modules


    【解决方案1】:

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

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

    【讨论】:

    • 这为我解决了问题。运行这些命令后,我的 go.sum 文件中出现了不同的哈希值。我将其提交给版本控制,神奇地让我的 CI 振作起来:-)
    • 我不知道这是怎么发生的,但是这些命令可以解决它。谢谢!
    • 我按照步骤清理了-modcache。然后我又浪费了 1 个小时下载依赖项。 :( 需要有更好的解决方案。
    • @MarufTuhin 我想你可以在$GOPATH/pkg/mod的缓存文件夹中搜索你的版本并将其删除。
    • 为了避免长时间的下载,可以从go.sum删除校验和不匹配的mod条目并运行go mod tidy,这只会更新该模块的校验和!
    【解决方案2】:

    您使用的是哪个版本的 Go?你很有可能会遇到1.11.2 -> 1.11.4 的后果:

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

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

    TL;DR - 升级开始

    【讨论】:

    • 感谢您的回复。实际上,我使用的是 11.1(我假设是 11.1.0)。我已经对 Go 早期版本中的问题有所了解,所以昨天我在本地更新到 11.1.4。这似乎并没有改变问题:但是我认为在 Heroku 这样的平台上,仍然使用较旧的 go 11.1.0。
    • 我将 Heroku 上的设置更改为使用 1.11.4,看来我的问题已经解决了。非常感谢!
    【解决方案3】:
    1. 删除 go.sum : rm go.sum
    2. 重新生成 go.sum : go mod tidy

    【讨论】:

    • 有道理,我也想过,运行它,然后......它没有工作,同样的错误 =S 解决方案:对作为依赖项包含的其他项目执行相同的操作,而这些项目又具有导致初始错误的共享库
    【解决方案4】:

    我在使用 1.12.8 时遇到了同样的问题,并且没有缓存清理会有所帮助。原来我仍然被困在 GOPATH 和 Mod 世界的中间。我在另一个帖子 (How do I migrate from Dep to Go Modules) 中发现了一个对我有用的标志。

    go run -mod=vendor main.go
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        您需要从 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 - 仅删除未使用的包并添加新版本。但它不会删除老年人

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-10
          • 1970-01-01
          • 2020-07-02
          • 2021-03-20
          相关资源
          最近更新 更多