You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
697 B

  1. package plugin
  2. import (
  3. "plugin"
  4. "sync"
  5. "github.com/gin-gonic/gin"
  6. )
  7. const (
  8. OnlyFuncName = "Plugin"
  9. )
  10. var ManagementPlugin = managementPlugin{mp: make(map[string]*plugin.Plugin)}
  11. type managementPlugin struct {
  12. mp map[string]*plugin.Plugin
  13. sync.Mutex
  14. }
  15. func (m *managementPlugin) SetPlugin(key string, p *plugin.Plugin) {
  16. m.Lock()
  17. defer m.Unlock()
  18. m.mp[key] = p
  19. }
  20. func (m *managementPlugin) GetPlugin(key string) (p *plugin.Plugin, ok bool) {
  21. m.Lock()
  22. defer m.Unlock()
  23. p, ok = m.mp[key]
  24. return
  25. }
  26. // Plugin 插件模式接口化
  27. type Plugin interface {
  28. // Register 注册路由
  29. Register(group *gin.RouterGroup)
  30. // RouterPath 用户返回注册路由
  31. RouterPath() string
  32. }