Kew*_*win 2 loops interface go
我想打印一个复杂的数据集,比如 bellowing
package main
import (
"fmt"
// "reflect"
)
func main() {
var initData []interface{}
initData[0] = map[string]interface{}{
"name": "k1",
"type": "line",
"data": []int{1, 2, 3, 4},
}
initData[1] = map[string]interface{}{
"name": "k2",
"type": "circle",
"data": []int{11, 12, 13, 14},
}
for _, data := range initData {
for k, v := range data {
fmt.Println(k)
for _, sv := range v {
fmt.Println(" " + sv)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但得到一个错误
./maps-in-maps.go:56: cannot range over data (type interface {})
Run Code Online (Sandbox Code Playgroud)
有什么帮助吗?尝试将接口类型化数据集协调为可交互的,如 arry 或 slice
您必须首先对每个interface{}级别进行类型断言,在这种情况下,在级别使用类型断言,map[string]interface{}因为我们知道一个确定的类型,并使用类型开关来检查下一层中每个嵌套值的预期类型。
initData := []interface{}{
map[string]interface{}{
"name": "k1",
"type": "line",
"data": []int{1, 2, 3, 4},
},
map[string]interface{}{
"name": "k2",
"type": "circle",
"data": []int{11, 12, 13, 14},
},
}
for _, data := range initData {
for _, v := range data.(map[string]interface{}) {
switch t := v.(type) {
case string, []int:
fmt.Println(t)
default:
fmt.Println("wrong type")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里运行操场。