为了账号安全,请及时绑定邮箱和手机立即绑定

查找接口的所有实现并将它们放在切片中

查找接口的所有实现并将它们放在切片中

Go
一只萌萌小番薯 2022-10-04 16:10:32
我正在尝试实现一个像这样的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{})

}

导入所有声明插件的包后,将填充插件。


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 58 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号