为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中循环结构和访问数组

在 golang 中循环结构和访问数组

Go
慕尼黑8549860 2022-11-23 15:45:31
我的问题是我希望能够遍历每个服务器并在该循环中遍历 UsageData我当前的循环给了我一个关于遍历资产的错误,不知道为什么我无法访问 assets.Server.UsageData这是我的代码:https ://go.dev/play/p/ttNVW5_Q4Yspackage mainimport (    "encoding/json"    "fmt")type Asset struct {    Server struct {        Host string `json:"host"`        Port string `json:"port"`    } `json:"server"`    Postgres struct {        Host      string `json:"host"`        User      string `json:"user"`        Password  string `json:"password"`        DB        string `json:"db"`        UsageData []struct {            Region string `json:"Region"`            Mbps   int    `json:"Mpbs"`        } `json:"UsageData"`    } `json:"database"`}func main() {    jsonConfig := []byte(`[    {        "server":{            "host":"serverA",            "port":"8080"},        "database":{            "host":"serverA",            "user":"db_user",            "password":"supersecret",            "db":"A_db",            "UsageData":[{"Region":"US","Mbps":100}, {"Region":"EU","Mbps":140}]        }    },    {        "server":{            "host":"serverB",            "port":"8383"},        "database":{            "host":"serverB",            "user":"db_user2",            "password":"acbd123",            "db":"B_db",            "UsageData":[{"Region":"US","Mbps":58}, {"Region":"EU","Mbps":250}]        }       }]`)    var assets []Asset    err := json.Unmarshal(jsonConfig, &assets)    if err != nil {        panic(err)    }    fmt.Printf("Assets: %+v\n", assets)    //fmt.Printf("Config: %+v\n", assets.Server.Host)    //fmt.Printf("Config: %+v\n", assets.database.UsageData)    //fmt.Printf("Config: %+v\n", assets.Server.UsageData)    for _, asset := range assets {        fmt.Printf("%v\n", asset)        //for _, Usage := range assets.UsageData {        //  fmt.Printf("%v\n",Usage)        //}    }}** 正确答案的代码,我错误地调用了嵌套结构**https://go.dev/play/p/tEbA405WWbC
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

所提供jsonConfig的在技术上不是不正确的,但密钥应该是唯一的(参见问题)。
似乎 encoding/json 将覆盖最后一次出现的值。

所以你有两个选择:

  1. 更改jsonConfig[{asset1}, {asset2}](参见固定游乐场

  2. 实现自定义解组器

我绝对推荐第一个选项。


查看完整回答
反对 回复 2022-11-23
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信