使用 Go 保留 YAML 映射的顺序
Posted
技术标签:
【中文标题】使用 Go 保留 YAML 映射的顺序【英文标题】:Preserving order of YAML maps using Go 【发布时间】:2016-02-11 21:04:40 【问题描述】:我试图弄清楚如何在 Go 中读取 YAML 文件,同时保留 YAML 文档中的键顺序。我见过的大多数示例都涉及对键进行排序,但这在我的情况下不起作用。此外,YAML 是任意结构的(键是用户定义的,值是字符串和字符串列表的混合,也是用户定义的),这使事情变得复杂。
go-yaml.v2 似乎可以满足我的要求 (http://blog.labix.org/2014/09/22/announcing-yaml-v2-for-go),但我找不到任何有关如何使用排序功能的示例。这一点,加上对 Go 完全陌生,让我很困惑。
如果需要,我很乐意提供我尝试解析的 YAML 示例。
【问题讨论】:
只需使用该包中的MapSlice
类型,而不是您反序列化到的数据结构中的map
。
【参考方案1】:
给你:
var data = `
a: Easy!
b:
c: 2
d: [3, 4]
`
m := yaml.MapSlice
err := yaml.Unmarshal([]byte(data), &m)
if err != nil
log.Fatalf("error: %v", err)
fmt.Printf("--- m:\n%v\n\n", m)
【讨论】:
很好的例子——但在大多数情况下我们知道under类型。所以我想保持map[string]*MyType
的顺序有没有简单的解决方案? @hobbs以上是关于使用 Go 保留 YAML 映射的顺序的主要内容,如果未能解决你的问题,请参考以下文章