1. 程式人生 > >Golang 通過方法名呼叫方法

Golang 通過方法名呼叫方法

有這樣一個結構體 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) }