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方法的子集。