golang中使用反射Reflect遍历切片or结构体取值(实例)
2019-07-15 16:57
2506 查看
话不多说直接上例子说明。
[
{
“key”: 1561075200000,
“agg”: {“value”: 123}
},
{
“key”: 1561161600000,
“agg”: {“value”: 125}
},
{…},
{…},
]
如上所示是一个内嵌struct的切片,我想输出key 和value 的值:
for i := 0; i < len(m); i++{ //m为上述切片 sysConfig := reflect.ValueOf(m).Index(i).Elem() fmt.Println(sysConfig.Field(0).Int()) //输出"key"的值,并进行数据类型转换(也可不转换直接输出) fmt.Println(sysConfig.Field(1).Field(0).Float()) //输出"value"的值,并进行数据类型转换(也可不转换直接输出) }
也可根据名字获取嵌套结构的值
func Field(i int) StructField //使用索引来访问字段,索引从0开始,如果越界将panic func FieldByName(name string) (StructField,bool) //使用名称来访问字段,如果未找到那么返回false func FieldByNameFunc(match func(string) bool) (StructField,bool) //访问名称使得match函数返回true的字段,在同一个内嵌层次上,只能有一个字段使得match返回true。如果同一层次上多个字段使得match返回true,那么这些字段都认为是不符合要求的 func FieldByIndex(index []int) StructField //这个方法使得访问结构的内嵌字段成为可能。将访问各个层次的字段的索引排列起来,就形成了一个[]int,参数index不可越界,否则panic
还可参考https://my.oschina.net/solate/blog/715681
相关文章推荐
- C#中使用反射机制得到类型实例应用Demo
- android中反射技术使用实例
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- 引用】C#反射实例(一) 利用反射使用类库
- 使用反射构造对象实例并动态调用方法
- 使用反射取出实例挂勾的事件列表
- 300.33通过读取配置文件方式来使用反射完成实例对象调用方法
- 使用反射机制创建对象实例
- 使用反射机制用一个类实例的值为DataTable添加一行
- 使用反射动态创建类型实例
- Java反射学习总结四(动态代理使用实例和内部原理解析)
- 使用new和反射实例化内部类对象
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
- 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
- 使用反射技术动态创建类对象(实例代码)
- 反射-实例化一个未知的类(使用System.AppDomain类)
- PHP的反射类ReflectionClass、ReflectionMethod使用实例
- 反射-实例化一个未知的类(使用System.AppDomain类)
- 在Golang中使用C语言代码实例
- JAVA反射使用实例和class.getResource()得到URL中含有中文和空格乱码问题