提交 4561d866 编写于 作者: S songzhibin97

feat:插件注册&差分so

上级 32327feb
......@@ -5,6 +5,7 @@ import (
"gin-vue-admin/global"
"gin-vue-admin/middleware"
"gin-vue-admin/router"
"gin-vue-admin/router/example"
"net/http"
"github.com/gin-gonic/gin"
......@@ -35,6 +36,9 @@ func Routers() *gin.Engine {
systemRouter.InitBaseRouter(PublicGroup) // 注册基础功能路由 不做鉴权
systemRouter.InitInitRouter(PublicGroup) // 自动初始化相关
}
example.PluginInit(PublicGroup)
PrivateGroup := Router.Group("")
PrivateGroup.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{
......
package example
import "github.com/gin-gonic/gin"
import (
"gin-vue-admin/utils/plugin"
type Plugin struct {
"github.com/gin-gonic/gin"
)
var Plugin []plugin.Plugin = []plugin.Plugin{&PluginExample}
var PluginExample = pluginExample{}
type pluginExample struct {
}
func (*Plugin) Register(group *gin.RouterGroup) {
func (*pluginExample) Register(group *gin.RouterGroup) {
group.GET("hello", func(context *gin.Context) {
context.JSON(200, "hello world")
})
}
func (*Plugin) RouterPath() string {
func (*pluginExample) RouterPath() string {
return "group"
}
func PluginInit(group *gin.RouterGroup) {
for i := range Plugin {
PluginGroup := group.Group(Plugin[i].RouterPath())
Plugin[i].Register(PluginGroup)
}
}
package plugin
import (
"plugin"
"sync"
"github.com/gin-gonic/gin"
)
......@@ -11,26 +8,6 @@ const (
OnlyFuncName = "Plugin"
)
var ManagementPlugin = managementPlugin{mp: make(map[string]*plugin.Plugin)}
type managementPlugin struct {
mp map[string]*plugin.Plugin
sync.Mutex
}
func (m *managementPlugin) SetPlugin(key string, p *plugin.Plugin) {
m.Lock()
defer m.Unlock()
m.mp[key] = p
}
func (m *managementPlugin) GetPlugin(key string) (p *plugin.Plugin, ok bool) {
m.Lock()
defer m.Unlock()
p, ok = m.mp[key]
return
}
// Plugin 插件模式接口化
type Plugin interface {
// Register 注册路由
......
......@@ -10,8 +10,29 @@ import (
"os"
"path/filepath"
"plugin"
"sync"
)
var ManagementPlugin = managementPlugin{mp: make(map[string]*plugin.Plugin)}
type managementPlugin struct {
mp map[string]*plugin.Plugin
sync.Mutex
}
func (m *managementPlugin) SetPlugin(key string, p *plugin.Plugin) {
m.Lock()
defer m.Unlock()
m.mp[key] = p
}
func (m *managementPlugin) GetPlugin(key string) (p *plugin.Plugin, ok bool) {
m.Lock()
defer m.Unlock()
p, ok = m.mp[key]
return
}
// LoadPlugin 加载插件 传入path
func LoadPlugin(path string) error {
path, err := filepath.Abs(path)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册