猿问

GoLang - 迭代数据以解组多个 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}}

正如预期的那样,解组函数会找到一次出现的 YAML 数据。


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


慕尼黑5688855
浏览 370回答 1
1回答

慕沐林林

一个简单的改变来完成你想要的事情是将数据yaml放在一个数组中的项目中,然后解组到一个切片中Containervar 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}}]
随时随地看视频慕课网APP

相关分类

Go
我要回答