golang通过反射调用方法
package main
import (
"fmt"
"reflect"
"log"
)
func main() {
//调用无参方法
reflectInterface(testReflectParam,nil)
//调用有参方法
reflectInterface(testReflectParam2,getValues(5,"Hello"))
}
//根据参数获取对应的Values
func getValues(param ...interface{}) []reflect.Value {
vals := make([]reflect.Value,0,len(param))
for i := range param {
vals = append(vals,reflect.ValueOf(param[i]))
}
return vals
}
func reflectInterface(funcInter interface{},paramsValue []reflect.Value) {
v := reflect.ValueOf(funcInter)
if v.Kind() != reflect.Func {
log.Fatal("funcInter is not func")
}
values := v.Call(paramsValue) //方法调用并返回值
for i := range values {
fmt.Println(values[i])
}
}
//无参方法
func testReflectParam() (string,string){
return "hello world","你好!"
}
//有参方法
func testReflectParam2(i int,s string) (int,string){
i++
return i,s
}