2014-10-10 12 views
9

Ecco il mio file YAML.Golang YAML lettura con mappa delle mappe

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

posso leggere una versione più piatta di questo con il pacchetto gopkg.in/yaml.v1 ma mi sono bloccato cercando di capire come leggere questo file YAML, quando è ottenuto quello che sembra una mappa di mappe.

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) 
} 

Non riesce a far uscire i frutti nidificati. Sembra tornare vuoto. Value: []main.Fruit(nil).

risposta

11

Utilizzare una mappa di fette di stringa per rappresentare le proprietà di frutta:

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

Stampa la configurazione eseguito l'unmarshalling con

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

produce il seguente output (escluso lo spazio bianco ho aggiunto per migliorare la leggibilità):

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

Sì. Era esattamente quello che stavo cercando. Grazie. – squarism

Problemi correlati