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

在 Go 中存储/访问嵌套数据 - 使用结构?

在 Go 中存储/访问嵌套数据 - 使用结构?

Go
郎朗坤 2022-01-17 16:42:58
我需要在我的 go 代码内部维护一些数据:一个嵌套多层深度的 ID,当提供父道具的名称时可以访问它。例如,如果用 JavaScript 编写,我会这样做:var data = {    1111: {        la1: {            lb1: 1343584765,            lb2: 1545438458        },        la2: {            lb1: 1263268535,            lb2: 1468904679        }    },    2222: {        la1: {            lb1: 1645078365,            lb2: 1457732458        },        la2: {            lb1: 1682974682,            lb2: 1782975685        }    }}然后像这样访问(是的,顶部道具需要是一个整数):data[1111]['la1']['la2'] //gets 1343584765但我看不出如何用 Go 结构构建这个结构,而且我读过的大多数东西都建议不要这样做。我能看到的唯一另一种方法是在 Go 中使用此逻辑,但感觉很混乱,而且可能会变得更大,因此难以维护:func getVal(    varA int,    varB string,    varC string,) int {    if varA == 1111 {        if varB == "la1" {            if varC == "lb1" {                return 1343584765            }            if varC == "lb2" {                return 1545438458            }        }        if varB == "la2" {            if varC == "lb1" {                return 1263268535            }            if varC == "lb2" {                return 1468904679            }        }    }    if varA == 2222 {    ....etc然后访问:getVal(1111, "la1", "lb1") //gets 1343584765非常感谢任何可以帮助我的人!
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超5个赞

你处理问题的方式非常奇特。也许您已经知道这一点,但您可能不知道:使用 maps。


我用命名错误的类型做了一个例子(因为我不知道你的用例),我还把所有东西都变成了一个字符串来保持简单。


type l3Map map[string]string

type l2Map map[string]l3Map

type l1Map map[string]l2Map


func main() {


    data := l1Map{

        "1111": l2Map{

            "la1": l3Map{

                "lb1": "1343584765",

                "lb2": "1545438458",

            },

        },

    }


    fmt.Printf("%v\n", data["1111"]["la1"]["lb2"])

}

https://play.golang.org/p/daKjDbX8Ao


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号