map 某部分的Golang for循环

标签 go

尝试为 map 的每个部分创建一个 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)
            }
        }
    }
}

最佳答案

Effective Go完成 go 教程后,它是一个很好的资源。 那里还描述了如何迭代 slice :

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

或者如果您不需要 key :

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

如果它是一片 map ,您可能必须嵌套两个循环:

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

关于 map 某部分的Golang for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29583841/

相关文章:

go - golang 中的嵌套 map 创建

go - 如何仅给定接口(interface)示例来初始化对象列表?

go - 如何编译不符合 `go get`模式的go代码

go - Html 解析器忽略 img 标签(Golang)

go - 在 Go 中正确获取多态代码

go - 作为另一个用户执行

go - 如何获取 IP 数据包并注入(inject)不同的 VM 和接口(interface)

go - 是否有相当于 "gcloud container clusters get-credentials"的 golang sdk

go - args ...interface{} 对于方法的参数到底意味着什么?

date - 如何将字符串时间戳转换为我可以显示的 UTC 日期?