golang 函数动态调用
package main import ( "fmt" "reflect" ) type User struct { Id int Name string Age int } type Object struct{} func (obj Object) Hello(args ...interface{}) int { fmt.Println("func call ") argc := 0 for _, v := range args { fmt.Println(v) argc++ } return argc } func main() { // m := User{1, "sth", 20} // t := reflect.TypeOf(m) // fmt.Println(t) // fmt.Printf("%#v\n", t.Field(0)) // fmt.Printf("%#v\n", reflect.ValueOf(m).Field(1)) var obj Object ptr := reflect.ValueOf(obj) fun := ptr.MethodByName("Hello") //args := []reflect.Value{reflect.ValueOf("str1"), reflect.ValueOf("str2"), reflect.ValueOf(5), reflect.ValueOf(7)} args := make([]reflect.Value, 0) //make len must be zero to create a nil slice str := []string{"str1", "str2"} num := []int{3, 4, 5} for _, k := range str { args = append(args, reflect.ValueOf(k)) } for _, i := range num { args = append(args, reflect.ValueOf(i)) } rv := fun.Call(args) for i, val := range rv { fmt.Printf("%d --> %#v\n", i, val) } }
如上为golang中实现函数动态调用,类似于php中的 call_user_func_array() 函数