Map 在golang地图上迭代
我有一个类型为:Map 在golang地图上迭代,map,go,loops,Map,Go,Loops,我有一个类型为:map[string]interface{} 最后,我创建了如下内容(使用goyaml从yml文件反序列化后) 我如何遍历此地图?我尝试了以下方法: for k, v := range mymap{ ... } 但我有一个错误: cannot range over mymap typechecking loop involving for loop 请帮忙。例如 package main import "fmt" func main() { type Map1 m
map[string]interface{}
最后,我创建了如下内容(使用goyaml从yml文件反序列化后)
我如何遍历此地图?我尝试了以下方法:
for k, v := range mymap{
...
}
但我有一个错误:
cannot range over mymap
typechecking loop involving for loop
请帮忙。例如
package main
import "fmt"
func main() {
type Map1 map[string]interface{}
type Map2 map[string]int
m := Map1{"foo": Map2{"first": 1}, "boo": Map2{"second": 2}}
//m = map[foo:map[first: 1] boo: map[second: 2]]
fmt.Println("m:", m)
for k, v := range m {
fmt.Println("k:", k, "v:", v)
}
}
输出:
m: map[boo:map[second:2] foo:map[first:1]]
k: boo v: map[second:2]
k: foo v: map[first:1]
您可以通过一行完成:
mymap := map[string]interface{}{"foo": map[string]interface{}{"first": 1}, "boo": map[string]interface{}{"second": 2}}
for k, v := range mymap {
fmt.Println("k:", k, "v:", v)
}
输出为:
k: foo v: map[first:1]
k: boo v: map[second:2]
你可以这样用多行写出来
$ cat dict.go
package main
import "fmt"
func main() {
items := map[string]interface{}{
"foo": map[string]int{
"strength": 10,
"age": 2000,
},
"bar": map[string]int{
"strength": 20,
"age": 1000,
},
}
for key, value := range items {
fmt.Println("[", key, "] has items:")
for k,v := range value.(map[string]int) {
fmt.Println("\t-->", k, ":", v)
}
}
}
以及输出:
$ go run dict.go
[ foo ] has items:
--> strength : 10
--> age : 2000
[ bar ] has items:
--> strength : 20
--> age : 1000
是否可以提供一个测试用例?很难从您发布的内容中诊断问题,因为您发布的内容本身并没有可能导致类型检查循环的内容。特别是,我很难弄清楚如何在函数体中获得类型检查循环。一句话不是围棋的目标。
$ go run dict.go
[ foo ] has items:
--> strength : 10
--> age : 2000
[ bar ] has items:
--> strength : 20
--> age : 1000