有这样一个结构体 Person,带有4个方法。

现在有个需求,想通过方法的名字调用对应的方法,想到的办法是将名字和对应方法建立 map 关系。

type Person struct {
	nape string
	age  int
}

func (p *Person) SetName(nape string) { p.nape = nape }
func (p *Person) GetName() string     { return p.nape }
func (p *Person) SetAge(age int)      { p.age = age }
func (p *Person) GetAge() int         { return p.age }
func main() {
    p := Person{
        nape: "Test",
        age:  1,
    }
    fmt.Println("Before", p)
    methodMap := map[string]interface{}{
        "SetName": p.SetName,
        "GetName": p.GetName,
        "SetAge":  p.SetAge,
        "GetAge":  p.GetAge,
    }
    for k, v := range methodMap {
        switch k {
        case "SetName":
            v.(func(string))("Aland")
        case "GetName":
            fmt.Println(v.(func() string)())
        case "SetAge":
            v.(func(int))(18)
        case "GetAge":
            fmt.Println(v.(func() int)())
        }
    }
    fmt.Println("After", p)
}