1.反射之用字符串函数名调用函数

package main

import (
    "fmt"
    "reflect"
)

/**
通过反射获取它对应的函数,然后通过call来调用
 */
func main() {
    var animal = Animal{}
    val := reflect.ValueOf(&animal)
    f := val.MethodByName("Eat")
    f.Call([]reflect.Value{})

    //传参 
    f3 := val.MethodByName("SetName")
    params := make([]reflect.Value,1)
    params[0] = reflect.ValueOf("旺财")
    f3.Call(params)

    f2 := val.MethodByName("GetName")
    f2.Call([]reflect.Value{})

}

type Animal struct {
    name string
}

func (e *Animal) Eat() {
    fmt.Println("eat test")
}
func (e *Animal) SetName(name string)  {
    e.name = name
}
func (e *Animal) GetName() string {
    fmt.Println("name",e.name)
    return e.name
}

杨帆
28 声望3 粉丝