在Go中嵌入结构化数据(golang)

时间:2013-12-10 12:06:16

标签: optimization map go constants

我正在使用golang中的AI游戏引擎,我需要存储一些预先计算好的数据,以便尽快访问。

数据的结构如下:

{
    'type1': {
        0: {
            0: { 1, 2, 3, 4, 5, 6, 7 },
            1: { 2, 3, 4 },
        },
        1: {
            0: { 2, 3, 4, 5, 6 },
        },
    },
    "type2": {
        0: {
            { 63, 23, 42, 12 },
        },
    },
}

将这些数据嵌入已编译的二进制文件的最佳方法是什么?数据永远不会改变并代表游戏规则。

我知道我可以创建一个在堆上分配映射的函数,但我认为直接访问数据更自然。

1 个答案:

答案 0 :(得分:3)

事实证明,嵌入数据非常容易。要在包范围中声明变量:

var someVar = map[string][][][]uint8 {
    'type1': [][][]uint8 {
        0: [][]uint8 {
            0: []uint8 { 1, 2, 3, 4, 5, 6, 7, },
        },
    },
}

在包范围内声明它使其可访问,至少对于包范围中的函数是可访问的。

关于此标记的唯一令人讨厌的事情是您最初必须声明整个结构的格式。然后,当您深入到层次结构中时,需要“弹出”结构的第一部分。例如:

var someVar = map[string][][][]uint8 {}

这里,map [string] uint8声明了一个包含字符串键和uint8值的映射。 map [string] [] uint8声明一个带有字符串键和uint8值数组的映射。

对于您深入到结构的每个级别,您都会弹出格式定义的开头。

var someVar map[string][][][]uint8 {
                    0: [][][]uint8 {
                      0: [][]uint8 {
                        0: []uint8 {
                          1, 2, 3, 4, 5,
                        },
                      },
                    },
}

奇怪的缩进旨在说明弹出的内容