5

我有一个在启动时加载插件的应用程序(守护进程)。在一个子包(daemon/interfaces)中,我有一些该程序的插件应该使用的接口。

这意味着主程序也被插件导入。

我正在使用 Go 模块(用于主程序和插件)来修复版本,我可以看到go.mod它正在为插件使用最新版本的主程序。

我可以很好地构建它们,但是当我加载插件时它给了我一个错误说

 panic: plugin.Open("plugins/my-plugin"): plugin was built with a different version of package daemon/interfaces

我正在使用 Go 1.12.7 来构建这两个包。

4

2 回答 2

4

go.mod我通过在我的插件文件中添加一个替换语句来解决这个问题

module github.com/user/plugin

go 1.12

require (
    github.com/user/daemon v1.1.1
)

replace github.com/user/daemon v1.1.1 => ../local/path/to/daemon/

go build github.com/user/project/当您通过使用项目的全名 ( )从源代码所在的目录之外构建项目时,它也会有所帮助

Golang 存储库中有一个相关的 Github 问题,您可以在此处找到

于 2019-08-08T08:06:36.697 回答
-1

显然,这个问题仍然悬而未决。问题开启者提出了我能够使用的解决方法。有关详细信息,请查看下面的历史记录。

git clone https://github.com/zimnx/central.git
git clone https://github.com/zimnx/plugins.git
cd central/
go clean -modcache
git checkout v1.0.0
go install -a
cd ../plugins/
rm go.mod 
go mod init github.com/zimnx/plugins
echo '' >> go.mod
echo 'replace github.com/zimnx/central => ../central' >> go.mod
go build -buildmode=plugin -o plugin.so
central plugin.so 

为我工作。谜团仍然...... :)输出已被保存为最好奇的人。

于 2020-04-15T16:04:39.150 回答