Go Yaml MapSlice,用于在marshall或unmarshall时保留序列
我不知道如何使用Yaml MapSlice数据结构。从这里开始,我设法将其解组到一种mapslice类型,但如何将其映射到我自己的结构Go Yaml MapSlice,用于在marshall或unmarshall时保留序列,go,yaml,Go,Yaml,我不知道如何使用Yaml MapSlice数据结构。从这里开始,我设法将其解组到一种mapslice类型,但如何将其映射到我自己的结构 var data = ` id: id-jakut: en: name: North Jakarta City label: North Jakarta id: name: Kota Jakarta Utara label: Jakarta Utara id-jaksel: en:
var data = `
id:
id-jakut:
en:
name: North Jakarta City
label: North Jakarta
id:
name: Kota Jakarta Utara
label: Jakarta Utara
id-jaksel:
en:
name: South Jakarta City
label: South Jakarta
id:
name: Kota Jakarta Selatan
label: Jakarta Selatan
tw:
tw-tp:
en:
name: Taipei City
label: Taipei
zh-TW:
name: 台北
label: 台北市
tw-ntp:
en:
name: New Taipei City
label: New Taipei City
zh-TW:
name: 新北市
label: 新北市
`
type cityLocale struct {
Name string `yaml:"name,flow"`
Label string `yaml:"label,flow"`
}
type cityLocales map[string]cityLocale
type cities map[string]cityLocales
type countryCities map[string]cities
func main() {
m := yaml.MapSlice{}
err := yaml.Unmarshal([]byte(data), &m)
if err != nil {
log.Fatalf("error: %v", err)
}
fmt.Printf("MAPSLICE==>%+v\n\n", m)
t := countryCities{}
err = yaml.Unmarshal([]byte(data), &t)
if err != nil {
log.Fatalf("error: %v", err)
}
fmt.Printf("NORMAL==>%+v\n", t["tw"])
}
你需要改变你的城市类型,因为你错过了一张地图。如果您的城市是一张字符串地图,那么您的代码可以工作:
type cities map[string]map[string]cityLocales
你在问如何保持顺序,但你的结构是无序的。您想使用MapSlice做什么?你的城市结构不起作用,因为它与YAML的结构不同。Okie我现在修复了结构,是的,如何保持序列。我应该把m映射到t还是用其他方法呢?嗨,对不起,不清楚。是的,我错过了这一部分,但真正的问题是如何在解组时保持顺序,因为地图从来没有排序过。因此,不可能保持地图的顺序。你唯一能做的就是使用一个有顺序的切片。如果您知道yaml定义,您可以定义列表上的每个对象,然后可以将该结构解组为一个切片。