golang中使用反射Reflect遍历切片or结构体取值(实例)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值