代码拉取完成,页面将自动刷新
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()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。