Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go Yaml MapSlice,用于在marshall或unmarshall时保留序列_Go_Yaml - Fatal编程技术网

Go Yaml MapSlice,用于在marshall或unmarshall时保留序列

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:

我不知道如何使用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:
      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定义,您可以定义列表上的每个对象,然后可以将该结构解组为一个切片。