有这样一个结构体 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)
}
本文介绍了一个使用Go语言实现的动态调用结构体方法的案例。通过创建一个Person结构体及四个方法,利用反射机制将方法名与方法建立映射关系,实现了根据方法名称动态调用相应方法的功能。
2万+

被折叠的 条评论
为什么被折叠?



