话不多说直接上例子说明。
[
{
“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