Golang и YAML чтения с карты карты

вот мой файл 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: %#vn", config.Description)
  fmt.Printf("Value: %#vn", config.Fruits)
}

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

1 ответов


используйте карту строковых срезов для представления свойств фруктов:

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

печать конфигурации неупорядочены с

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

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

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