2013-12-10 53 views
1

我正在研究golang中的AI遊戲引擎,並且我需要存儲一些預計算數據以便儘可能快地訪問。在Go中嵌入結構化數據(golang)

數據的結構是這樣的:

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

什麼是這個數據嵌入到編譯的二進制的最佳方式?數據永遠不會改變,並代表遊戲規則。

我知道我可以創建一個在堆上分配映射的函數,但我認爲直接訪問數據更自然。

回答

3

原來,嵌入數據非常容易。在包範圍中聲明變量:

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

在包範圍中聲明它至少對於包範圍中的函數是可訪問的。

這個標記唯一令人討厭的事情是,你最初必須聲明整個結構的格式。然後,當您深入到層次結構中時,您需要「彈出」結構的第一部分。例如:

這裏,map [string] uint8聲明一個帶有字符串鍵和uint8值的映射。 map [string] [] uint8用字符串鍵和uint8值數組聲明一個映射。

對於每個層次,您都會深入到結構中,從格式定義的開始處跳出。

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

怪異的缺口是爲了說明什麼是被彈出

+1

全球範圍內→包範圍 – thwd

+0

@tomwilde謝謝;我已更新該帖子。 – frodeborli

+0

構建地圖時,實際上可以省略這些類型。看[這個例子在玩](http://play.golang.org/p/f0ngH5dd41)。 – nemo