golang插件如何验证包的版本?

时间:2017-10-31 12:57:49

标签: go plugins

我尝试使用golang插件并在调用plugin.Open时始终出现运行时错误。

plugin.Open: plugin was built with a different version of package

我确定该插件是使用相同的代码构建的。现在我对错误信息感到困惑。

这些验证机制如何运作?

2 个答案:

答案 0 :(得分:1)

src/runtime/plugin.go

for _, pkghash := range md.pkghashes {
    if pkghash.linktimehash != *pkghash.runtimehash {
        md.bad = true
        return "", nil, "plugin was built with a different version of package " + pkghash.modulename
    }
}

答案 1 :(得分:0)

为便于将来参考,这些哈希在此处计算:https://golang.org/src/cmd/link/internal/ld/lib.go?h=genhash#L807 似乎它读取了程序包的二进制输出,因此任何可以考虑到该程序包的信息都对二进制代码有影响。