V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
imherer
V2EX  ›  Go 编程语言

请教大佬们一个 go 数据结构问题

  •  
  •   imherer · 2019-08-01 09:55:50 +08:00 · 2400 次点击
    这是一个创建于 1736 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假如我有一个函数计算出来的结果如下:

    {
    	"android": {
    		"1.01": {
    			"101": 0
    		}
    	},
    	"ios": {
    		"1.01": {
    			"101": 0,
    			"102": 2
    		},
    		"1.02": {
    			"101": 0
    		}
    	}
    }
    

    其中只有androidios这 2 个 key 是已知的,里面两层的 key 及 key 的数量都是未知的

    我现在只能用 map 嵌套的方式来表达这个值,即这样map[string]map[string]map[string]int

    但是这样感觉可读性太差了,大佬们还有别的方式吗?

    或者说是在设计上应该尽量避免掉这种情况

    大佬们在实际工作中这种 map 嵌套的情况常用吗?

    8 条回复    2019-08-27 08:39:09 +08:00
    TypeErrorNone
        1
    TypeErrorNone  
       2019-08-01 10:07:02 +08:00   ❤️ 1
    不是大佬
    应该避免这种设计,里面包裹成数组方式
    dic
        2
    dic  
       2019-08-01 10:10:12 +08:00 via Android   ❤️ 1
    解析到 map[string]interface{} ,用的时候做类型断言
    imherer
        3
    imherer  
    OP
       2019-08-01 10:10:43 +08:00
    @TypeErrorNone 谢谢。 但是这种里面套了 2 层 map 如果换成数组的话感觉会是 map 套一个数组然后数组里再套一个数组😂
    flxxy
        4
    flxxy  
       2019-08-01 10:12:42 +08:00 via Android
    接口就是这个时候用的鸭
    darklowly
        5
    darklowly  
       2019-08-01 10:13:16 +08:00
    我所在的公司,要是谁这么设计结构,我要杀人的。
    imherer
        6
    imherer  
    OP
       2019-08-01 10:13:53 +08:00
    @dic
    @flxxy 一开始也是想到用 interface 的,但是一想到用的时候要断言 就想直接定义好得了。。。
    TypeErrorNone
        7
    TypeErrorNone  
       2019-08-01 11:35:51 +08:00   ❤️ 1
    {
    "android":{
    "version":"1.01",
    "sons":[
    {
    "version":101,
    "val":0
    },
    {
    "version":102,
    "val":1
    }
    ]
    }
    }
    abel1989
        8
    abel1989  
       2019-08-27 08:39:09 +08:00
    楼上的牛 p
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2212 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:57 · PVG 13:57 · LAX 22:57 · JFK 01:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.