Golang 通过方法名调用方法

本文介绍了一个使用Go语言实现的动态调用结构体方法的案例。通过创建一个Person结构体及四个方法,利用反射机制将方法名与方法建立映射关系,实现了根据方法名称动态调用相应方法的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有这样一个结构体 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)
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值