1、reflect.Value
本质为包含一种基础类型的copy。如ptr、int、struct...
reflect.Indirect()
对一个value使用。如果value包含的是指针,返回指针指向的对象;否则返回一个该value的copy。
即,indirect返回的value有【引用类型】和【值类型】两种情况
v.Addr()
如果v是引用类型的value,获得引用值的addr
v.Elem();
获得v内部指针或接口指向的value,v肯定是【引用类型】。
v.Interface()
value转换interface。引用。
reflect.New(r.T)
获得一个包含指针的value。可以直接indirect
v.Field(n)
获取v结构体的第n个成员的引用。
v.FieldByName("age")
获取age成员的引用。
v.Field(n).Addr()
获取其成员的地址
————————————————————
2、reflect.Type 保存某个对象的Type。但不保存其值,是value的子集
t.Name() 获取如"int","float"的字符串
t.Field(n)返回结构体类型t的第n个成员的reflect.Structure简称rs
rs.Name string该成员的符号字符串
rs.Type 该成员的数据类型reflect.Type
————————————
Method
通过value获得method:此method不包含第0参(因为value结构体储存了实体)
通过type获得mthod:包含第0参,因为type接口不储存实体。
1、仅能获得对外暴露的方法。
2、第0参为struct的方法,是第0参为*struct方法的子集。