1 Star 0 Fork 0

TimWong / ecgo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
middleware.go 883 Bytes
一键复制 编辑 原始数据 按行查看 历史
Tim 提交于 2021-06-17 22:36 . first version
package ecgo
import (
"reflect"
)
// IMiddleware 中间件接口
type IMiddleware interface {
Next()
Handler()
append(next interface{})
wrapper(wrapper *Wrapper)
}
// Middleware 中间件对象
type Middleware struct {
*Wrapper
next interface{}
}
// 指定下一个
func (m *Middleware) append(next interface{}) {
m.next = next
}
// 包装器
func (m *Middleware) wrapper(wrapper *Wrapper) {
m.Wrapper = wrapper
}
// Next 调用下一个中间件
func (m *Middleware) Next() {
switch o := m.next.(type) {
case IMiddleware:
o.Handler()
case IController:
v := reflect.ValueOf(o)
mn := v.Elem().FieldByName("action").String()
v.MethodByName(mn).Call(nil)
case func(w *Wrapper):
o(m.Wrapper)
default:
panic("Router Closure Error")
}
}
// 统一入口
type entranceMiddleware struct {
*Middleware
}
func (m *entranceMiddleware) Handler() {
m.Next()
}
Go
1
https://gitee.com/tim1020/ecgo.git
git@gitee.com:tim1020/ecgo.git
tim1020
ecgo
ecgo
v1.0.1

搜索帮助

53164aa7 5694891 3bd8fe86 5694891