gpt4 book ai didi

go - 如何打开 YAML 文件,更改内容并将其保存回 Go?

转载 作者:数据小太阳 更新时间:2023-10-29 03:41:39 26 4
gpt4 key购买 nike

我需要从 Go 代码更改 YAML 文件中的一些值。就我而言,我需要从 Helm chart 更改 values.yaml 文件。由于该文件可以更改,我不会提前构建整个文件(例如,开发人员在各种项目中添加了新的 YAML 部分)。我只知道我想更改的部分是什么样子的。

我知道 Go 中有 YAML 库 ( https://github.com/go-yaml/yaml )。它不会完成这项工作,因为它假设我事先知道我需要更改的文件结构。所有的例子都是这样的:1.创建结构2. 将 YAML 解码为结构3.改变4.编码并保存

它对我不起作用,因为我不知道文件的确切格式,因此我无法执行第 1 步,创建结构。

这是我要更改的 YAML 文件的一部分:

image:
repository: nginx
tag: stable
pullPolicy: IfNotPresent

我知道这可以在 interface{} 的帮助下完成,但我不明白怎么做。假设我了解结构、编码/解码 YAML 文件,有人可以提供以下代码:1.加载至少有20个条目且结构未知的YAML文件2. 仅更改 1 个条目(在我的例子中,我想更改图像部分的标签号)3. 保存回来。

非常感谢!

最佳答案

像这样的东西应该可以工作:

data, err := ioutil.ReadFile(file)
var v interface{}
err = yaml.Unmarshal(data, &v)
img, ok := v.["image"].(map[interface{}]interface{})
if ok {
img["tag"] = "somevalue"
}

我使用解码到 map[interface{}]interface{} 的 yaml 库。您需要添加必要的错误检查、类型断言等。

完成后,您可以yaml.Marshal(v) 并写入结果。

关于go - 如何打开 YAML 文件,更改内容并将其保存回 Go?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57526320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com