2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您打算擁有任意深度,那么創(chuàng)建一個(gè)可以嵌套的默認(rèn)結(jié)構(gòu)可能是值得的:
type area struct {
Name string
//Any other area info
Sections []*area
}
創(chuàng)建新的 struct 對(duì)象時(shí)不會(huì)初始化指針切片,因此它是一個(gè)有效的構(gòu)造。聲明a.Sections = new([]*area)并附加area指向它的指針。您將有l(wèi)en(a.Sections)一個(gè)for range用于樹(shù)遍歷的循環(huán)。
解析和遍歷將遞歸編碼,因此如果您以不同的方式處理不同的區(qū)域,則需要一個(gè)類(lèi)型標(biāo)識(shí)符。

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
讓我們回顧一下層次結(jié)構(gòu)。
在頂層,您將國(guó)家/地區(qū)名稱(chēng)映射到國(guó)家/地區(qū)對(duì)象。
每個(gè)國(guó)家對(duì)象將區(qū)域名稱(chēng)映射到區(qū)域?qū)ο蟆?/p>
每個(gè)區(qū)域?qū)ο髮⒊擎?zhèn)名稱(chēng)映射到城鎮(zhèn)對(duì)象。
在 Go 中,您可以將層次結(jié)構(gòu)的每一層實(shí)現(xiàn)為 a map[string]*Something
,最后一層由Town
包含有關(guān)城鎮(zhèn)的各種信息的對(duì)象組成:
type Country map[string]*Area
type Area map[string]*Town
type Town struct {
Name string
Population int
Latitude, Longitude float64
}
您在問(wèn)題中給出的示例層次結(jié)構(gòu)如下所示:
countries := map[string]*Country{
"country1": &Country{
"area1": &Area{
"town1": &Town{},
"town2": &Town{},
},
"area2": &Area{
"town3": &Town{},
},
},
}
如果您不想映射到具體類(lèi)型,可以使用map[string]interface{},但是您將需要類(lèi)型斷言來(lái)處理值。以下是從 Zack Bloom 關(guān)于Go 和 JSON的文章中提取的代碼示例:
var parsed map[string]interface{}
data := []byte(`
{
"id": "k34rAT4",
"age": 24
}
`)
err := json.Unmarshal(data, &parsed)
idString := parsed["id"].(string)
- 2 回答
- 0 關(guān)注
- 283 瀏覽
添加回答
舉報(bào)