2015-03-30 173 views
0

我对Golang相当陌生,请原谅我的错误。GoLang - 对数据进行迭代以解组多个YAML结构

我目前使用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循环,通过数据变量循环并将所有事件编组成单独的Container结构体。我怎么能做到这一点?

非常感谢!

回答

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}}] 
+0

利奥您好,感谢了一堆片! – 2015-03-31 10:49:33