Go插件-“插件是使用其他版本的软件包构建的”

时间:2019-08-08 07:38:37

标签: go plugins go-build

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

这意味着主程序也将通过插件导入。

我正在使用Go模块(用于主程序和插件)来修复版本,并且在insert into tbname (xxx1),(xxx2),(xxx3)...; 中可以看到它正在使用插件的主程序的最新版本。

我都可以很好地构建它们,但是当我加载插件时,它会提示我一个错误

go.mod

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

2 个答案:

答案 0 :(得分:1)

我通过在插件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存储库that you can find here

上有一个相关的Github问题。

答案 1 :(得分:0)

显然,the issue仍处于打开状态。问题解决工具提供了解决方法,我可以使用它。请查看下面的历史记录行以了解详细信息。

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 

为我工作。 Mistery仍然... :) The output已被保存下来,以示最好奇。