【问题标题】:How to produce YAML with keys in insertion order Go?如何使用插入顺序 Go 中的键生成 YAML?
【发布时间】:2016-03-27 18:15:29
【问题描述】:

我正在使用Go-Yaml 将一些映射序列化为 YAML。有没有办法确保序列化的 YAML 是按照它们插入 Go Map 的顺序使用键编写的?还是需要自己重新实现 Marshal 接口?

【问题讨论】:

  • Go 中的地图没有定义的顺序。事实上,它在迭代时是显式随机化的:blog.golang.org/go-maps-in-action#TOC_7.
  • 改用 github.com/kylelemons/go-gypsy/yaml。
  • @hasanyasin 看起来它会有同样的问题,因为它的 Map 在内部表示为 map[string]Node
  • 这不是一个记录的特性,只是实现的结果,但看起来如果你使用struct,输出当前是按照声明字段的顺序。 Here's code--自然不会在(无库的)游乐场环境中工作。如果您预先知道您的字段,因此您可以将它们放在struct 中,并且您只关心出于美学原因的排序(即,如果您升级 go-yaml 并且排序更改,您的系统不会崩溃),也许现在就够了。
  • @twotwotwo 抱歉没有具体说明。我使用 ReadFile 而不是 Parse,然后在树上行走。这比在没有任何控制权的情况下将所有文档刷新到 Go 中要好得多。

标签: go yaml


【解决方案1】:

Go 地图不跟踪插入顺序。为此,您必须实现自己的机制来读取密钥并存储订单。

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2011-02-15
    • 2018-08-01
    • 2015-09-13
    • 1970-01-01
    • 2021-01-14
    相关资源
    最近更新 更多