我正在嘗試實現一個像這樣的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 關注
- 73 瀏覽
添加回答
舉報
0/150
提交
取消