2015-03-30 179 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