本文整理汇总了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
}