2 回答
TA贡献1828条经验 获得超6个赞
如果您打算拥有任意深度,那么创建一个可以嵌套的默认结构可能是值得的:
type area struct {
Name string
//Any other area info
Sections []*area
}
创建新的 struct 对象时不会初始化指针切片,因此它是一个有效的构造。声明a.Sections = new([]*area)并附加area指向它的指针。您将有len(a.Sections)一个for range用于树遍历的循环。
解析和遍历将递归编码,因此如果您以不同的方式处理不同的区域,则需要一个类型标识符。
TA贡献1854条经验 获得超8个赞
让我们回顾一下层次结构。
在顶层,您将国家/地区名称映射到国家/地区对象。
每个国家对象将区域名称映射到区域对象。
每个区域对象将城镇名称映射到城镇对象。
在 Go 中,您可以将层次结构的每一层实现为 a map[string]*Something
,最后一层由Town
包含有关城镇的各种信息的对象组成:
type Country map[string]*Area
type Area map[string]*Town
type Town struct {
Name string
Population int
Latitude, Longitude float64
}
您在问题中给出的示例层次结构如下所示:
countries := map[string]*Country{
"country1": &Country{
"area1": &Area{
"town1": &Town{},
"town2": &Town{},
},
"area2": &Area{
"town3": &Town{},
},
},
}
如果您不想映射到具体类型,可以使用map[string]interface{},但是您将需要类型断言来处理值。以下是从 Zack Bloom 关于Go 和 JSON的文章中提取的代码示例:
var parsed map[string]interface{}
data := []byte(`
{
"id": "k34rAT4",
"age": 24
}
`)
err := json.Unmarshal(data, &parsed)
idString := parsed["id"].(string)
- 2 回答
- 0 关注
- 255 浏览
添加回答
举报