查找golang中每个依赖项的校验和



我希望能够获得go程序使用的每个包的校验和,包括模块内使用的包。

标准库中的runtime/debugReadBuildInfo(),这很好,但它只提供模块的数据,而不是包的数据。

的例子:

package pkgA
var Foo = 1
package pkgB
import "pkgA"
var Bar = pkgA.Foo
package main
import (
"fmt"
"runtime/debug"
"example/pkgB"
)
func main() {
_ = pkgB.Bar
b, ok := debug.ReadBuildInfo()
if !ok {
fmt.Println("not ok!")
return
}
for _, module := range b.Deps {
fmt.Println(module.Path, module.Sum)
}
}

输出如

pkgB v0.0.0-20210225235400-92e28d816f64

没有关于a的信息,我相信这是因为pkgBpkgA都属于同一个模块。

:是否有办法访问pkgA的校验和?

Go校验和数据库存储模块的校验和,而不是包。二进制文件中嵌入的调试信息不包括从包到模块的映射,但是如果您可以访问模块的源代码,您可以使用go list报告从包到模块的映射:

go list -f '{{if .Module}}{{.ImportPath}}: {{.Module}}{{end}}' all

您可以将该映射与模块级校验和结合使用,以验证每个包是否具有正确的源代码。(注意go mod verify已经实现了这个验证。)

相关内容

  • 没有找到相关文章

最新更新