【发布时间】:2022-02-02 22:15:23
【问题描述】:
在 golang 中想要一个具有全局注册表的插件系统。结构可以简化如下:
/plugins/registry.go
/plugins/plugin1/impl.go
registry.go:
package plugins
import "plugins/plugin1" // required for plugin1.MakePlugin
type IPlugin interface {
Register() error
}
type Factory func(x int) IPlugin
var registry = []Factory{
plugin1.MakePlugin,
}
impl.go:
package plugin1
import "plugins" // required for IPlugin
type Plugin struct {
x int
}
func MakePlugin(x int) plugins.IPlugin {
return &Plugin{
x: x,
}
}
如何在不将IPlugin 移动到第三个(例如common)包的情况下解决?
PS。我想如果我从MakePlugin 返回*Plugin,这将与Factory 兼容,但不是!!!
【问题讨论】:
-
把所有东西放在一个包里。
标签: go package circular-dependency