Golang从yaml文件中提取值

Golang从yaml文件中提取值,go,yaml,Go,Yaml,我想从这个yaml中提取task的值。这很棘手,因为它可能位于文件中的不同路径。除了上面的task可以在yaml文件中找到的路径之外,还有一些不同的路径。是否有一种简单的方法可以提取任务的所有值?我是否应该转换为json?go yaml希望您为该类型定义一个目标类型和一个解组器 如果您想使用键task提取某个映射中的所有值,您的类型将是任务名称列表 对于该类型,您需要创建一个unmarshaler函数,该函数接受YAML文件的根节点,并将任务名称提取到您定义的类型的对象中 下面是一个简单的工作示

我想从这个yaml中提取
task
的值。这很棘手,因为它可能位于文件中的不同路径。除了上面的
task
可以在yaml文件中找到的路径之外,还有一些不同的路径。是否有一种简单的方法可以提取
任务
的所有值?我是否应该转换为
json

go yaml希望您为该类型定义一个目标类型和一个解组器

如果您想使用键
task
提取某个映射中的所有值,您的类型将是任务名称列表

对于该类型,您需要创建一个unmarshaler函数,该函数接受YAML文件的根节点,并将任务名称提取到您定义的类型的对象中

下面是一个简单的工作示例:

主程序包
进口(
“错误”
“fmt”
“gopkg.in/yaml.v3”
)
类型任务结构{
items[]字符串
}
//descent在YAML映射和序列结构中实现递归下降
函数(t*任务)下降(节点*yaml.node)错误{
切换节点。种类{
案例yaml.SequenceNode:
对于_,项:=范围(node.Content){
t、 下降(项目)
}
案例yaml.MappingNode:
对于i:=0;i
输出:

jobs:
- name: test
 public: true
 plan:
 - try:
     task: task1
     file: test1.yaml
   on_success:
     in_parallel:
       steps:
       - task: task2
         file: test2.yaml
       - task: task3
         file: task3.yaml

请注意,此解决方案通常不正确,因为YAML节点可能包含循环(由于YAML锚/别名),这将导致堆栈溢出,因为代码没有检查循环。

go YAML希望您为该类型定义目标类型和解组器

如果您想使用键
task
提取某个映射中的所有值,您的类型将是任务名称列表

对于该类型,您需要创建一个unmarshaler函数,该函数接受YAML文件的根节点,并将任务名称提取到您定义的类型的对象中

下面是一个简单的工作示例:

主程序包
进口(
“错误”
“fmt”
“gopkg.in/yaml.v3”
)
类型任务结构{
items[]字符串
}
//descent在YAML映射和序列结构中实现递归下降
函数(t*任务)下降(节点*yaml.node)错误{
切换节点。种类{
案例yaml.SequenceNode:
对于_,项:=范围(node.Content){
t、 下降(项目)
}
案例yaml.MappingNode:
对于i:=0;i
输出:

jobs:
- name: test
 public: true
 plan:
 - try:
     task: task1
     file: test1.yaml
   on_success:
     in_parallel:
       steps:
       - task: task2
         file: test2.yaml
       - task: task3
         file: task3.yaml

请注意,此解决方案通常不正确,因为YAML节点可能包含循环(由于YAML锚/别名),这将导致堆栈溢出,因为代码没有对照循环进行检查。

什么是
task
的“值”,尽管这里有三个不同的
task
键;你认为他们中的哪一个是“价值”?到目前为止,您尝试了什么?如果您知道如何使用
json
,您也可以这样做,但对于
yaml
(您的文件格式):是一个良好的开端point@Jorropo我可以很容易地将其转换为JSON。您将如何在JSON中执行此操作?@EliBendersky需要所有这些
task
键的值。我尝试使用YAML解组器,但遇到了问题,因为我无法定义解组器的结构,因为
任务
键可能出现在文件中的许多不同位置;你认为他们中的哪一个是“价值”?到目前为止,您尝试了什么?如果您知道如何使用
json
,您也可以这样做,但对于
yaml
(您的文件格式):是一个良好的开端point@Jorropo我可以很容易地将其转换为JSON。您将如何在JSON中执行此操作?@EliBendersky需要所有这些
task
键的值。我试图做一个YAML解编器,但遇到了问题