golang 中 reflect 简单用法

限于喜欢 提交于 2019-11-26 03:43:25
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age  int
}
func (p Person) GetName() string {
return p.Name
}
func (p Person) SetName(s string) {
p.Name = s
}
func main() {
a := &Person{"Name", 1}
t := reflect.TypeOf(*a)      //必须取值,否则类型为空

fmt.Println(t.Name())


v := reflect.ValueOf(a).Elem()    //a需要是引用
k := v.Type()
for i := 0; i < v.NumField(); i++ {
key := k.Field(i)
val := v.Field(i)
fmt.Println(key.Name, val.Type(), val.Interface())

}


for i := 0; i < v.NumMethod(); i++ {
key := k.Method(i)
val := v.Method(i)
fmt.Println(key.Name, val.Type(), val.Interface())
}
v.FieldByName("Name").Set(reflect.ValueOf("Name"))
fmt.Println(a.Name)
name := v.MethodByName("GetName").Call([]reflect.Value{})
fmt.Println(name)
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!