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

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

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

Go
慕尼黑8549860 2022-11-23 15:45:31

我的问题是

  1. 我希望能够遍历每个服务器并在该循环中遍历 UsageData

  2. 我当前的循环给了我一个关于遍历资产的错误,不知道为什么

  3. 我无法访问 assets.Server.UsageData

这是我的代码:https ://go.dev/play/p/ttNVW5_Q4Ys

package main


import (

    "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贡献1639条经验 获得超8个赞

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

所以你有两个选择:

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

  2. 实现自定义解组器

我绝对推荐第一个选项。


查看完整回答
反对 回复 2022-11-23

添加回答

举报

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