func structBridge(v interface{},funcName string,args...interface{}){
rVal := reflect.ValueOf(v)
vFunc := rVal.MethodByName(funcName)
input := make([]reflect.Value, len(args))
for i, _ := range args {
input[i] = reflect.ValueOf(args[i])
}
output := vFunc.Call(input)
if len(output)>0 {
for _, v := range output {
fmt.Println(v)
}
}
}
func funcBridge(call interface{},args...interface{}) (output []reflect.Value) {
vFunc := reflect.ValueOf(call)
input := make([]reflect.Value, len(args))
for i, _ := range args {
input[i] = reflect.ValueOf(args[i])
}
output = vFunc.Call(input)
return
}
无论是结构体的方法还是函数,都需要通过Call进行调用。
funcBridge传入函数的指针(call)以及调用参数列表(args)
structBridge传入结构体(建议传入指针)方法名(funcname),参数列表(args)结构体的方法以func之前的参数可以分为:
(1)以结构体作为参数调用。
(this Student)func(args...int)
(2) 以结构体的指针作为参数调用。
(this* Student)func(args...int)
在反射的场景下两者会有细微的差别;如果传入的是结构体,那么就无法调用第二类函数,如果传入的是指针,那么两种函数都可以调用!