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

Optimization 在Go(golang)中嵌入结构化数据,optimization,map,go,constants,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

我正在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 },
        },
    },
}
将这些数据嵌入已编译二进制文件的最佳方式是什么?数据永远不会改变,代表着游戏规则


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

事实证明,嵌入数据非常容易。要在包作用域中声明变量,请执行以下操作:

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,
                        },
                      },
                    },
}

这个奇怪的缩进旨在说明从全局范围弹出的内容→ 实际上,在构建映射时,可以省略类型。看见