您的位置:首页 > 编程语言 > Go语言

golang 中 reflect 简单用法

2016-06-27 22:50 543 查看
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)

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  golang reflect