【发布时间】:2019-01-27 14:16:31
【问题描述】:
假设我们有两个 yaml 文件
master.yaml
someProperty: "someVaue"
anotherProperty: "anotherValue"
override.yaml
someProperty: "overriddenVaue"
是否可以解组、合并,然后将这些更改写入文件,而不必为 yaml 文件中的每个属性定义 struct?
主文件中有超过 500 个属性,这些属性在执行时对服务来说根本不重要,所以理想情况下,我可以解组到地图中,进行合并并再次在 yaml 中写出但我比较新,所以想发表一些意见。
我有一些代码可以将 yaml 读入 interface,但我不确定将两者合并的最佳方法。
var masterYaml interface{}
yamlBytes, _ := ioutil.ReadFile("master.yaml")
yaml.Unmarshal(yamlBytes, &masterYaml)
var overrideYaml interface{}
yamlBytes, _ = ioutil.ReadFile("override.yaml")
yaml.Unmarshal(yamlBytes, &overrideYaml)
我已经研究过 mergo 这样的库,但我不确定这是否是正确的方法。
我希望在大师之后我能够写出带有属性的文件
someProperty: "overriddenVaue"
anotherProperty: "anotherValue"
【问题讨论】:
-
我相信这是可能的。你试过什么?你遇到了什么问题?
-
不定义结构是可能的,但我无法理解你真正想要合并哪些字段以及如何合并。
-
你为什么不只使用你需要的字段的结构并跳过你不需要的字段,这将节省大量使用接口的工作。
-
我添加了一些额外的信息。我不确定哪些字段可以被覆盖,它们是可以随意传递给我们的字段,这就是为什么我希望我们能够对此进行超级通用和抽象。
-
这是一个非常有趣的问题,我已经发布了深度合并的答案stackoverflow.com/questions/51947879/…
标签: go merge yaml marshalling unmarshalling