Golang for map的某些部分的循环

时间:2015-04-11 22:33:34

标签: go

尝试为地图的每个部分创建一个for循环。

map[
asn:AS10 
time:1.428790768e+09 
ipv4s:[
      68.114.75.0/24 
      216.215.56.0/22 
      216.215.60.0/22] 
ipv6s:[
      2607:f3f8::/32
]]

上面是地图,我想尝试为ipv4s中的每个值创建一个for循环。

我尝试过,但我显然没有正确地做到这一点,因为它仅仅基于我的PHP知识。:

for json_map["ipv4s"]{
   //whatever       
}

PHP版本,如果有人需要一个例子而不是我试图解释:

foreach($obj->ipv4s as $value) {
     echo $value; // return an ip
}

更新

package main

import (
    "fmt"
    "net/http"
    "os"
    "encoding/json"
    )

func main() {

    response, err := http.Get("https://www.enjen.net/asn-blocklist/index.php?asn=" + os.Args[1] + "&type=json_split&api=1")

    if err != nil {
        fmt.Printf("%s", err)
        os.Exit(1)
    } else {
        defer response.Body.Close()
        dec := json.NewDecoder(response.Body)
        if dec == nil {
            panic("Failed to start decoding JSON data")
        }

        json_map := make(map[string]interface{})
        err = dec.Decode(&json_map)
        if err != nil {
            panic(err)
        }

        fmt.Printf("%v\n", json_map)

        for i := range json_map {
            for _, ip := range json_map[i]["ipv4s"] {
                fmt.Printf(ip)
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

完成go教程后,

Effective Go是一个很好的资源。 在那里还描述了如何迭代切片:

for key, value := range json_map {
    // ...
}

或者,如果您不需要密钥:

for _, value := range json_map {
    // ...
}

如果是一片地图,你可能需要嵌套两个循环:

for i := range json_map {
    for _, ip := range json_map[i]["ipv4s"] {
      // ...
    }
}