微信搜索superit|邀请体验:大数据, 数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

你了解beego框架的生命周期吗?

就是下面这个

定义:

type ControllerInterface interface {
   Init(ct *context.Context, controllerName, actionName string, app interface{})
   Prepare()
   Get()
   Post()
   Delete()
   Put()
   Head()
   Patch()
   Options()
   Trace()
   Finish()
   Render() error
   XSRFToken() string
   CheckXSRFCookie() bool
   HandlerFunc(fn string) bool
   URLMapping()
}

反射:

func (p *ControllerRegister) AddAutoPrefix(prefix string, c ControllerInterface) {
    reflectVal := reflect.ValueOf(c)
    rt := reflectVal.Type()
    ct := reflect.Indirect(reflectVal).Type()
    controllerName := strings.TrimSuffix(ct.Name(), "Controller")
    for i := 0; i < rt.NumMethod(); i++ {
        if !utils.InSlice(rt.Method(i).Name, exceptMethod) {
            pattern := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name), "*")
            patternInit := path.Join(prefix, controllerName, rt.Method(i).Name, "*")
            patternFix := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name))
            patternFixInit := path.Join(prefix, controllerName, rt.Method(i).Name)

            route := p.createBeegoRouter(ct, pattern)
            route.methods = map[string]string{"*": rt.Method(i).Name}
            for m := range HTTPMETHOD {
                p.addToRouter(m, pattern, route)
                p.addToRouter(m, patternInit, route)
                p.addToRouter(m, patternFix, route)
                p.addToRouter(m, patternFixInit, route)
            }
        }
    }
}

转载请注明:SuperIT » 你了解beego框架的生命周期吗?

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!