Go 使用反射调用指定方法

使用 MethodByName,如下:

package main

import (
	"fmt"
	"reflect"
)

func main() {
	h := &Human{18, "elsa"}
	v := reflect.ValueOf(&h)
	elem := v.Elem()
	m := elem.MethodByName("String")
	fmt.Println(m.Call(nil)[0])

	p := make([]reflect.Value, 1)
	p[0] = reflect.ValueOf(19)
	elem.MethodByName("Age").Call(p)
	fmt.Println(m.Call(nil)[0])
}

type Human struct {
	age  int
	name string
}

func (h *Human) Name(name string) {
	h.name = name
}

func (h *Human) Age(age int) {
	h.age = age
}

func (h *Human) String() string {
	return fmt.Sprintf("{name: %s, age: %d}", h.name, h.age)
}
评论

退出登录