我正在尝试实现一个像这样的golang插件接口:package mainimport "fmt"type Plugin interface { Run() bool}type Plugin1 struct{}type Plugin2 struct{}func (p Plugin1) Run() bool { fmt.Println("Plugin1::Run()") return true}func (p Plugin2) Run() bool { fmt.Println("Plugin2::Run()") return true}func main() { plugins := []Plugin{ Plugin1{}, Plugin2{}, } for _, plugin := range plugins { plugin.Run() }}我可以调用切片中定义的所有插件。切片中的项目是硬编码的,有没有办法自动生成切片?plugins
1 回答

忽然笑
TA贡献1806条经验 获得超5个赞
执行此操作的一种常见方法是拥有一个寄存器函数,并从包的函数中调用该函数。那是:init()
var plugins = []Plugin{}
func RegisterPlugin(p Plugin) {
plugins=append(plugins,p)
}
在声明插件的软件包中:
func init() {
plugins.RegisterPlugin(MyPlugin{})
}
导入所有声明插件的包后,将填充插件。
- 1 回答
- 0 关注
- 58 浏览
添加回答
举报
0/150
提交
取消