golang지도를 통해 반복


89

유형의지도가 있습니다. 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

도와주세요.


테스트 케이스를 제공 할 수 있습니까? 게시 한 내용에 내재되어있는 유형 검사 루프를 유발할 수있는 것이 없기 때문에 게시 한 내용에서 문제를 진단하기가 어렵습니다. 특히 함수 본문에서 유형 검사 루프를 얻는 방법을 파악하는 데 어려움을 겪고 있습니다.
SteveMcQwark 2011

답변:


107

예를 들면

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]

4

한 줄로 만들 수 있습니다.

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]

20
Go Proverb : 영리하지 말고 명시 적입니다. 원 라이너는 바둑의 목표가 아닙니다.
Inanc 구 무스

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.