Пример #1
0
// 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
}
Пример #2
0
// 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
}