接口定义:
package testPlugin type PluginFunc interface { Hello() World() } type Plugins struct { Plist map[string]PluginFunc } func (p *Plugins) Init() { p.Plist = make(map[string]PluginFunc) } func (p *Plugins) Register(name string, plugin PluginFunc) { p.Plist[name] = plugin }
插件1
package testPlugin import "fmt" type Plugin1 struct {} func (p *Plugin1) Hello() { fmt.Println("plugin1 hello") } func (p *Plugin1) World() { fmt.Println("plugin1 world") }
插件2:
package testPlugin import "fmt" type Plugin2 struct {} func (p *Plugin2) Hello() { fmt.Println("plugin2 hello") } func (p *Plugin2) World() { fmt.Println("plugin2 world") }
插件3:
package testPlugin import "fmt" type Plugin3 struct {} func (p *Plugin3) Hello() { fmt.Println("plugin3 hello") } func (p *Plugin3) World() { fmt.Println("plugin3 world") }
插件的使用:
package main import ( "test/testPlugin" ) func main() { plugin := new(testPlugin.Plugins) plugin.Init() plugin1 := new(testPlugin.Plugin1) plugin2 := new(testPlugin.Plugin2) plugin3 := new(testPlugin.Plugin3) plugin.Register("plugin1", plugin1) plugin.Register("plugin2", plugin2) plugin.Register("plugin3", plugin3) for _, p := range plugin.Plist { p.Hello() p.World() } }