Go语言如何打印[][]interface{}并提取切片指定位置元素
问题原因&解决方案
你直接调用内置println打印切片只会输出切片的长度、容量和底层数组的内存地址,不会打印具体元素内容,同时你的结构体定义可以优化减少类型转换逻辑,以下是两种实现方案:
方案1:基于你现有结构体调整
你只需要把原来的println(data.Activities)替换为如下遍历逻辑即可,注意要先导入fmt包:
for _, item := range data.Activities { // 避免子数组长度不足导致索引越界 if len(item) < 5 { continue } // JSON解析数字到interface{}默认类型为float64,需要先断言再转换为整型 num1, ok1 := item[3].(float64) num2, ok2 := item[4].(float64) if !ok1 || !ok2 { continue } fmt.Printf("%d,%d\n", int(num1), int(num2)) }
另外注意你代码中用error作为变量名不合适,error是Go内置的类型名,建议修改为err避免命名冲突。
方案2:优化结构体定义简化逻辑
由于返回的activities所有子元素都是整数,你可以直接把结构体的Activities字段定义为[][]int64,无需使用[][]interface{},省去类型断言步骤:
修改后的结构体:
type ActivityResp struct { Success bool `json:"success"` Activities [][]int64 `json:"activities"` ActivitiesCount int `json:"activities_count"` }
对应遍历代码:
for _, act := range data.Activities { if len(act) >= 5 { fmt.Printf("%d,%d\n", act[3], act[4]) } }
内容的提问来源于stack exchange,提问作者Scypno
相关产品推荐
相关产品推荐

