登录
首页 >  Golang >  Go问答

如何打开 YAML 文件、更改某些内容并将其保存回 Go 中?

来源:stackoverflow

时间:2024-04-05 18:45:37 370浏览 收藏

大家好,今天本人给大家带来文章《如何打开 YAML 文件、更改某些内容并将其保存回 Go 中?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

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

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

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

这是我试图更改的 yaml 文件的一部分:

image:
  repository: nginx
  tag: stable
  pullPolicy: IfNotPresent

我知道这可以在接口{}的帮助下完成,但我不明白如何做。假设我了解 struct、marshal/unmarshal 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"
}

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

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

终于介绍完啦!小伙伴们,这篇关于《如何打开 YAML 文件、更改某些内容并将其保存回 Go 中?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>