遍历 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 地图的主要内容,如果未能解决你的问题,请参考以下文章

golang golang flatten嵌套地图

golang golang地图列表

golang golang解析嵌套的地图

在 golang 中修改映射值 - 有和没有指针 - 意外行为 [关闭]

golang Golang反射:遍历任意结构

在 golang 中使用私有地图、切片的最佳实践是啥?