golang 中 reflect 简单用法

来源:互联网 发布:电商软件营销方案 编辑:程序博客网 时间:2024/04/30 19:21
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)
}
0 0
原创粉丝点击