// NewMutableFuncRouter 创建函数路由,可匹配无限层级和任意http方法的请求 // name:路由名称 // function:函数 // 函数必须满足如下格式: // func Method(param *ParamStruct) web.Result // param:可以没有或者有多个,如果有则类型必须为结构体指针类型 // 第一个返回结果最好是能够赋值给web.Result接口,也可以是其他类型 // return:执行成功则返回router.Router func NewMutableFuncRouter(name string, function interface{}) router.Router { var v = reflect.ValueOf(function) var mMd, err = meta.AnalyzeMethod(name, &v) if err != nil { panic(err) } var mr, err2 = router.NewRouter("unlimited", name, name) if err2 != nil { panic(err2) } var excutor = NewAdvancedExecutor(mMd) mr.SetRouterExcutorGenerator(func() router.RouterExcutor { return excutor }) return mr }
// NewFuncRouter 创建函数路由,根据方法返回值确定该方法处理哪种形式的http请求 // name:路由名称 // function:函数 // 函数必须满足如下格式: // func Method(param *ParamStruct) web.Result // param:可以没有或者有多个,如果有则类型必须为结构体指针类型 // 第一个返回结果最好是能够赋值给web.Result接口,也可以是其他类型 // return:执行成功则返回router.Router func NewFuncRouter(name string, function interface{}) router.Router { var v = reflect.ValueOf(function) var mMd, err = meta.AnalyzeMethod(name, &v) if err != nil { panic(err) } var mr = NewSpaceRouter(name) var excutor = NewAdvancedExecutor(mMd) var mName = "" if CheckResult(mMd) == nil { mName = mMd.Return[0].String() } mr.AddChildren(HttpResultRouter(mName, func() router.RouterExcutor { return excutor })) return mr }