Пройдясь по карте golang


у меня есть карта типа: map[string]interface{}

и, наконец, я получаю, чтобы создать что-то вроде (после десериализации из файла yml с помощью goyaml)

mymap = map[foo:map[first: 1] boo: map[second: 2]]

как я могу перебирать эту карту? Я попробовал следующее:

for k, v := range mymap{
...
}

но я получаю сообщение об ошибке:

cannot range over mymap
typechecking loop involving for loop

пожалуйста, помогите.

2 58

2 ответа:

например,

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]