今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《计算 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。
通过传递下载模块的cache
、prefix
来使用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知识!