2014-10-10 3 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) 
} 

Он не может получить вложенные фрукты. Кажется, он вернулся пустым. Value: []main.Fruit(nil).

ответ

11

Используйте карту строковых ломтиков, чтобы представлять фруктовые свойства:

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

Печать unmarshaled конфигурации с

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

производит следующий вывод (не включая пробельный я добавил для удобства чтения):

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

Да. Это именно то, что я искал. Спасибо. – squarism