遍历 golang 地图
Posted
技术标签:
【中文标题】遍历 golang 地图【英文标题】:Iterating through a golang map 【发布时间】:2011-12-22 13:17:55 【问题描述】:我有一张地图类型:map[string]interface
最后,我开始创建类似的东西(在使用 goyaml 从 yml 文件反序列化之后)
mymap = map[foo:map[first: 1] boo: map[second: 2]]
如何遍历此地图?我尝试了以下方法:
for k, v := range mymap
...
但我得到一个错误:
cannot range over mymap
typechecking loop involving for loop
请帮忙。
【问题讨论】:
可以提供测试用例吗?很难从您发布的内容中诊断问题,因为您发布的内容没有任何固有的东西可能导致类型检查循环。特别是,我无法弄清楚如何在函数体中获得类型检查循环。 【参考方案1】:例如,
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]
【讨论】:
【参考方案2】:一行一行就可以了:
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]
【讨论】:
Go 谚语:不要聪明,要明确。单行不是 Go 的目标。【参考方案3】:你可以像这样在多行中写出来,
$ 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
【讨论】:
以上是关于遍历 golang 地图的主要内容,如果未能解决你的问题,请参考以下文章