读取并合并两个Yaml文件

DominicEU:

假设我们有两个Yaml文件

master.yaml

someProperty: "someVaue"
anotherProperty: "anotherValue"

overlay.yaml

someProperty: "overriddenVaue"

是否可以解组,合并然后将这些更改写入文件,而不必为structyaml文件中的每个属性定义一个

主文件中包含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"
robx:

假设您只想在顶层进行合并,则可以将其解编为type的地图map[string]interface{},如下所示:

包主

import (
    "io/ioutil"

    "gopkg.in/yaml.v2"
)

func main() {
    var master map[string]interface{}
    bs, err := ioutil.ReadFile("master.yaml")
    if err != nil {
        panic(err)
    }
    if err := yaml.Unmarshal(bs, &master); err != nil {
        panic(err)
    }

    var override map[string]interface{}
    bs, err = ioutil.ReadFile("override.yaml")
    if err != nil {
        panic(err)
    }
    if err := yaml.Unmarshal(bs, &override); err != nil {
        panic(err)
    }

    for k, v := range override {
        master[k] = v
    }

    bs, err = yaml.Marshal(master)
    if err != nil {
        panic(err)
    }
    if err := ioutil.WriteFile("merged.yaml", bs, 0644); err != nil {
        panic(err)
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章