2017-05-05 116 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小写领域,那么你就不需要指定自定义名称。