接口定义:
- 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()
- }
- }