我需要在我的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
}
}
}
然后像这样访问(是的,顶级道具需要是一个int):
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
非常感谢能帮助我的人!
答案 0 :(得分:3)
你解决问题的方式非常奇特。也许你已经知道了这一点,但是你不会:use 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"])
}