登录
首页 >  Golang >  Go问答

计算 go.sum 文件中的模块校验和的方法是什么?

来源:stackoverflow

时间:2024-03-29 11:39:32 143浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《计算 go.sum 文件中的模块校验和的方法是什么?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我查看了 https://go.dev/doc/modules/gomod-ref 和 https://go.dev/ref/mod#go-mod-tidy,在这两个页面上我都找不到任何文档解释了 go.sum 中的校验和是如何计算的。

go.sum 中的校验和是如何计算的?


正确答案


校验和是依赖项的哈希值。您要查找的文档是 https://go.dev/ref/mod#go-sum-files

go.sum 中的每一行都有三个由空格分隔的字段:模块路径、版本(可能以 /go.mod 结尾)和哈希值。

  • 模块路径是哈希所属模块的名称。
  • 版本是哈希所属模块的版本。如果版本以 /go.mod 结尾,则哈希值仅适用于模块的 go.mod 文件;否则,哈希值适用于模块的 .zip 文件中的文件。
  • 哈希列由算法名称(如 h1)和 base64 编码的加密哈希组成,以冒号 (:) 分隔。目前,sha-256 (h1) 是唯一支持的哈希算法。如果将来发现 sha-256 中的漏洞,将添加对其他算法(名为 h2 等)的支持。

示例 go.sum 行与 module 版本 hash 类似

github.com/go-chi/chi v1.5.4 h1:qhdzf2szwjqvv4wmbyuntcsbig7ugaq0tpf2t5gcais=
github.com/go-chi/chi v1.5.4/go.mod h1:uaf8ygofazuokpbg7fxpftuylnumiev9awiwoeniueg=

如果您有兴趣手动计算/验证 checksums,您可以查看我的答案 here

通过传递下载模块的cacheprefix来使用bash

harsha $ sha256sum $(find /users/hmusanalli/go/pkg/mod/golang.org/x/[email protected] -type f | sort ) | sed 's#/users/hmusanalli/go/pkg/mod/##' | sha256sum | xxd -r -p | base64       
 cm0hf96j0hclawshpjzjfdnzs0gftslfgkt57wwhj0o=

使用 go 使用定义的内置 hashdir 函数 here

func TestHashDir2(t *testing.T) {
  out, err := HashDir("/Users/hmusanalli/go/pkg/mod/golang.org/x/[email protected]", "golang.org/x/[email protected]", Hash1)
  if err != nil {
    t.Fatalf("HashDir: %v", err)
  }

  want := "h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o="
  if out != want {
    t.Errorf("HashDir(...) = %s, want %s", out, want)
  }
}

好了,本文到此结束,带大家了解了《计算 go.sum 文件中的模块校验和的方法是什么?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>