当前位置: 首页>>代码示例>>Golang>>正文


Golang FuncValue.Type方法代码示例

本文整理汇总了Golang中reflect.FuncValue.Type方法的典型用法代码示例。如果您正苦于以下问题:Golang FuncValue.Type方法的具体用法?Golang FuncValue.Type怎么用?Golang FuncValue.Type使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在reflect.FuncValue的用法示例。


在下文中一共展示了FuncValue.Type方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: newThread

func newThread(route []interface{}) *Thread {
	if len(route) == 0 {
		return nil
	}
	first := reflect.NewValue(route[0])
	args := make([]reflect.Value, 0, 8)
	canStop := true
	ok := false
	var fv *reflect.FuncValue
	switch first.(type) {
	case *reflect.PtrValue:
		{
			if len(route) < 2 {
				return nil
			}
			if str, typeok := route[1].(string); typeok {
				fv = getMemFunc(first.(*reflect.PtrValue), str)
				typ := fv.Type().(*reflect.FuncType)
				needArgs := typ.NumIn()
				actualArgs := len(route) - 1
				if needArgs == actualArgs {
					ok = true
					canStop = false
				} else if needArgs == actualArgs+1 {
					canStop = true
					ok = checkLastArg(typ)
				}
				if ok {
					args = append(args, first)
					for _, i := range route[2:] {
						args = append(args, reflect.NewValue(i))
					}
				}
			}
		}
	case *reflect.FuncValue:
		{
			fv = first.(*reflect.FuncValue)
			typ := fv.Type().(*reflect.FuncType)
			needArgs := typ.NumIn()
			actualArgs := len(route) - 1
			if needArgs == actualArgs {
				ok = true
				canStop = false
			} else if needArgs == actualArgs+1 {
				canStop = true
				ok = checkLastArg(typ)
			}
			if ok {
				for _, i := range route[1:] {
					args = append(args, reflect.NewValue(i))
				}
			}
		}
	}

	if ok {
		t := new(Thread)
		t.fv = fv
		t.canStop = canStop
		t.args = args
		return t
	}
	return nil
}
开发者ID:gaxxx,项目名称:funx,代码行数:65,代码来源:thread.go


注:本文中的reflect.FuncValue.Type方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。