gpt4 book ai didi

go - 使用 Go 读写 Yaml 文件

转载 作者:行者123 更新时间:2023-12-01 22:08:30 27 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




我有数百个具有不同结构的 yaml 文件(与 K8s 和 Helm 相关),如果需要,我使用 python 进行编辑。我决定学习 Go,我想用 go 编写一个新脚本来编辑这些文件,但令人惊讶的是,我看到人们在阅读 yaml 文件(GO reading YAML file and mapping to slice of structsGo parse yaml file)之前就创建了 yaml 结构。我的意思是他们创建了一个结构,其中包含 yaml 文件中的所有键以及正确的缩进。

我想知道 Go 中是否有一个库,您只需为其提供文件路径并动态读取 yaml 文件?我想要python之类的东西,它可以读取文件,然后您可以访问类似于字典或 data['k1']['k2'] 的数据,完成编辑后,只需将其写回文件即可。

更新

我不明白询问图书馆有什么问题?这不是最终会发生的事情吗?人们提出了不同的解决方案,其中大多数人使用不同的库。另一方面,我想看看在哪里以及如何使用 Go,为什么我的问题跑题了?

最佳答案

您可以告诉 yaml 包解码为一个空接口(interface):

package main

import (
"gopkg.in/yaml.v3"
"reflect"
)

func main() {
var data interface{}
yaml.Unmarshal([]byte("foo: bar"), &data)
println(reflect.TypeOf(data).String())
}

这输出:
map[string]interface {}

您将获得一个由映射、 slice 或标量类型组成的结构,具体取决于输入。由于 Go 的静态类型系统,您需要使用反射/强制转换来访问实际值。

或者,您可以解码到节点中:
package main

import (
"gopkg.in/yaml.v3"
)

func main() {
var data yaml.Node
yaml.Unmarshal([]byte("foo: bar"), &data)
println(data.Kind)
}

这将打印 1 ,这是一个 DocumentNode .非标量节点将其子节点保存在 Content field ;您可以通过检查每个节点的 Kind 来浏览该结构。并为这些节点下降。

关于go - 使用 Go 读写 Yaml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59406919/

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