Go Yaml 解释示例

标签 go yaml

这个 Go Yaml 解释示例, https://gist.github.com/suntong001/74c85d15b19ef4b14b0e ,可以像这样解码一个简单的 YAML:

foo: 1
bar:
  - one
  - two

现在我想解释一个完全相同数据结构的数组,正确的做法是什么?

到目前为止,以下是我的代码,它没有按预期工作。请帮忙。

package main

import (
    "fmt"
    "log"

    "gopkg.in/yaml.v2"
)

type Config struct {
    Foo string
    Bar []string
}

type Configs struct {
    Cfgs []Config
}

var data = `
- foo: 1
  bar:
    - one
    - two
    - three
- foo: 2
  bar:
    - one1
    - two2
    - three3
`

func main() {

  var config Configs

    /*
       filename := os.Args[1]
       source, err := ioutil.ReadFile(filename)
       if err != nil {
           panic(err)
       }
    */

    source := []byte(data)

    err := yaml.Unmarshal(source, &config)
    if err != nil {
        log.Fatalf("error: %v", err)
    }

    //fmt.Printf("Value: %#v\n", config.Bar[0])

    fmt.Printf("--- config:\n%v\n\n", config)
}

更新:

Jfly 指出,要让它工作,只需将我的 var config Configs 替换为 var config []Config,就可以了。现在我想如果将我的数据定义更改为以下内容,我上面的代码就可以工作了。

foobars:
 - foo: 1
   bar:
    - one
    - two
    - three

 - foo: 2
   bar:
    - one1
    - two2
    - three3

不,它没有。请帮忙。

最佳答案

示例 yaml 文件的内容是对象序列,所以这样做:

package main

import (
    "fmt"
    "log"

    "gopkg.in/yaml.v2"
)

type Config struct {
    Foo string
    Bar []string
}

var data = `
- foo: 1
  bar:
    - one
    - two
    - three
- foo: 2
  bar:
    - one1
    - two2
    - three3
`

func main() {

    var config []Config

    /*
       filename := os.Args[1]
       source, err := ioutil.ReadFile(filename)
       if err != nil {
           panic(err)
       }
    */

    source := []byte(data)

    err := yaml.Unmarshal(source, &config)
    if err != nil {
        log.Fatalf("error: %v", err)
    }

    //fmt.Printf("Value: %#v\n", config.Bar[0])

    fmt.Printf("--- config:\n%v\n\n", config)
}

关于您更新的问题,您的代码几乎可以正常工作,只需像这样提示 yaml 解析器:

type Configs struct {
    Cfgs []Config `foobars`
}

关于Go Yaml 解释示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30837357/

相关文章:

yaml - Jekyll/Liquid - 如何将大块文本添加到 YAML 前面的内容?

go - 如何从共享的 play.golang.org url 中检索 golang 代码

mongodb - 如何使用struct使用mongo-go-driver的更新功能

yaml - Python : Read information from . yaml

yaml - 无法在 Azure DevOps 管道中激活 conda

html - YAML 类似于 HTML 的模板语言吗?

validation - YAML 架构验证?

post - golang 解析 POST 请求

go - 在()golang中读取二进制数据

http - 在 App Engine 的灵活环境中发出 HTTP Get 请求