猿问

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

我正在尝试实现一个像这样的golang插件接口:


package main


import "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


一只萌萌小番薯
浏览 59回答 1
1回答

忽然笑

执行此操作的一种常见方法是拥有一个寄存器函数,并从包的函数中调用该函数。那是:init()var plugins = []Plugin{}func RegisterPlugin(p Plugin) {  plugins=append(plugins,p)}在声明插件的软件包中:func init() {   plugins.RegisterPlugin(MyPlugin{})}导入所有声明插件的包后,将填充插件。
随时随地看视频慕课网APP

相关分类

Go
我要回答