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

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

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