有这样一个结构体 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)
}