猿问

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

我需要在我的 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

非常感谢任何可以帮助我的人!


郎朗坤
浏览 189回答 1
1回答

收到一只叮咚

你处理问题的方式非常奇特。也许您已经知道这一点,但您可能不知道:使用 maps。我用命名错误的类型做了一个例子(因为我不知道你的用例),我还把所有东西都变成了一个字符串来保持简单。type l3Map map[string]stringtype l2Map map[string]l3Maptype l1Map map[string]l2Mapfunc 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
随时随地看视频慕课网APP

相关分类

Go
我要回答