2017-05-05 166 views
0

我正在嘗試爲既是int又是字符串列表的數據結構編寫YAML。但是我無法獲得數據結構和YAML字符串匹配。例如Unmarshal YAML映射與列表嵌套

package main 

import (
    "fmt" 
    "log" 

    yaml "gopkg.in/yaml.v2" 
) 

type ThingAndGroups struct { 
    Groups []string 
    Value int 
} 

var someStr = ` 
thing1: 
    Groups: 
    - g1 
    - g2 
    Value: 
    5 
` 

func main() { 
    t := make(map[string]ThingAndGroups) 

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

返回

地圖[thing1:{[] 0}]

我怎麼thing1是一個字符串列表?

回答

1

改變你的類型與本

type ThingAndGroups struct { 
    Groups []string `yaml:"Groups"` 
    Value int  `yaml:"Value"` 
} 

在DOC爲https://godoc.org/gopkg.in/yaml.v2#Marshal它說

結構域只解組,如果他們出口(有一個大寫首字母),並解組使用lowercased作爲默認鍵的字段名稱。自定義鍵可通過「YAML」的名字在外地標籤來定義

或者你可以改變你的YAML輸入使用像value小寫領域,那麼你就不需要指定自定義名稱。