GoLang - 迭代数据以解组多个YAML结构

时间:2015-03-30 18:29:05

标签: go yaml

我对Golang相当新,请原谅我的新见事。

我目前正在使用yaml.v2包(https://github.com/go-yaml/yaml)将YAML数据解组为结构体。

请考虑以下示例代码:

package main

import (
  "fmt"
  "gopkg.in/yaml.v2"
  "log"
)

type Container struct {
  First  string
  Second struct {
    Nested1 string
    Nested2 string
    Nested3 string
    Nested4 int
  }
}

var data = `
  first: first value
  second:
    nested1: GET
    nested2: /bin/bash
    nested3: /usr/local/bin/customscript
    nested4: 8080

  first: second value
  second:
    nested1: POST
    nested2: /bin/ksh
    nested3: /usr/local/bin/customscript2
    nested4: 8081
`

func main() {

  container := Container{}

  err := yaml.Unmarshal([]byte(data), &container)
  if err != nil {
    log.Fatalf("error: %v", err)
  }
  fmt.Printf("---values found:\n%+v\n\n", container)

}

结果:

---values found: {First:second value Second:{Nested1:POST Nested2:/bin/ksh Nested3:/usr/local/bin/customscript2 Nested4:8081}}

这是预期的,unmarshal函数找到一次YAML数据。

我想要做的是编写一个简单的while / each / for循环,循环遍历数据变量,并将所有出现的内容编组为单独的Container结构。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

完成所需操作的简单更改是将yaml中的数据作为数组中的项目,然后将其解组为Container

的切片
var data = `
- first: first value
  second:
    nested1: GET
    nested2: /bin/bash
    nested3: /usr/local/bin/customscript
    nested4: 8080

- first: second value
  second:
    nested1: POST
    nested2: /bin/ksh
    nested3: /usr/local/bin/customscript2
    nested4: 8081
`

func main() {

    container := []Container{}

    err := yaml.Unmarshal([]byte(data), &container)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("---values found:\n%+v\n\n", container)

}

---values found:
[{First:first value Second:{Nested1:GET Nested2:/bin/bash Nested3:/usr/local/bin/customscript Nested4:8080}} {First:second value Second:{Nested1:POST Nested2:/bin/ksh Nested3:/usr/local/bin/customscript2 Nested4:8081}}]