2014-10-10 68 views
9

这是我的YAML文件。Golang YAML阅读地图地图

description: fruits are delicious 
fruits: 
    apple: 
    - red 
    - sweet 
    lemon: 
    - yellow 
    - sour 

我可以读这与gopkg.in/yaml.v1包一个平坦的版本,但我坚持试图弄清楚如何,当它得到了什么似乎像地图的地图阅读本YAML文件。

package main 

import (
    "fmt" 
    "gopkg.in/yaml.v1" 
    "io/ioutil" 
    "path/filepath" 
) 

type Config struct { 
    Description string 
    Fruits []Fruit 
} 

type Fruit struct { 
    Name string 
    Properties []string 
} 

func main() { 
    filename, _ := filepath.Abs("./file.yml") 
    yamlFile, err := ioutil.ReadFile(filename) 

    if err != nil { 
    panic(err) 
    } 

    var config Config 

    err = yaml.Unmarshal(yamlFile, &config) 
    if err != nil { 
    panic(err) 
    } 

    fmt.Printf("Value: %#v\n", config.Description) 
    fmt.Printf("Value: %#v\n", config.Fruits) 
} 

它无法获取嵌套Fruit。它似乎回到空虚。 Value: []main.Fruit(nil)

回答

11

使用地图的字符串切片来表示果实特性:使用

fmt.Printf("%#v\n", config) 

产生以下输出(不包括予添加用于可读性空白)

type Config struct { 
    Description string 
    Fruits map[string][]string 
} 

打印取消封送的配置:

main.Config{Description:"fruits are delicious", 
    Fruits:map[string][]string{ 
      "lemon":[]string{"yellow", "sour"}, 
      "apple":[]string{"red", "sweet"}}} 
+0

是的。那正是我所期待的。谢谢。 – squarism 2014-10-10 16:23:19