Go 插件 - “插件是使用不同版本的包构建的”

Pie*_*jan 8 plugins go go-build

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

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

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

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

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

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

Pie*_*jan 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/
Run Code Online (Sandbox Code Playgroud)

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

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