变量的内在机制
Go语言中的变量分成两个部分
- 类型信息:预先定义的元信息
- 值信息:程序运行过程中可动态变化的部分
反射reflect
反射是指程序在运行期间对程序本身进行访问和修改的能力,实现通过程序运行时反射,让程序能够操作任意类型的变量。
结构体反射
与结构体相关的方法
通过reflect.TypeOf()
获得反射对象信息后,若其类型是结构体,可以通过反射值对象(reflect.Type
)的NumField()
和Field()
方法获得结构体成员的详细信息 。
reflect.Type
中与获取结构体成员相关方法:
方法 | 说明 |
---|---|
Field(i int) StructField | 根据索引,返回索引对应的结构体字段的信息。 |
NumField() int | 返回结构体成员字段数量。 |
FieldByName(name string) (StructField, bool) | 根据给定字符串返回字符串对应的结构体字段的信息。 |
FieldByIndex(index []int) StructField | 多层成员访问时,根据 []int 提供的每个结构体的字段索引,返回字段的信息。 |
FieldByNameFunc(match func(string) bool) (StructField,bool) | 根据传入的匹配函数匹配需要的字段。 |
NumMethod() int | 返回该类型的方法集中方法的数目 |
Method(int) Method | 返回该类型方法集中的第i个方法 |
MethodByName(string)(Method, bool) | 根据方法名返回该类型方法集中的方法 |
StructField类型
StructField
类型用来描述结构体中的一个字段的信息。StructField
的定义如下:
1 | type StructField() struct{ |
1 | // struct-reflect demo |