Golang YAML 使用地图读取

Posted

技术标签:

【中文标题】Golang YAML 使用地图读取【英文标题】:Golang YAML reading with map of maps 【发布时间】:2014-12-05 02:18:01 【问题描述】:

这是我的 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)

它无法取出嵌套的 Fruits。它似乎空虚地回来。 Value: []main.Fruit(nil).

【问题讨论】:

【参考方案1】:

使用字符串切片的映射来表示水果属性:

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

使用

打印未编组的配置
fmt.Printf("%#v\n", config)

产生以下输出(不包括我为可读性添加的空格):

main.ConfigDescription:"fruits are delicious", 
     Fruits:map[string][]string
          "lemon":[]string"yellow", "sour", 
          "apple":[]string"red", "sweet"

【讨论】:

以上是关于Golang YAML 使用地图读取的主要内容,如果未能解决你的问题,请参考以下文章

在 golang 中使用私有地图、切片的最佳实践是啥?

使用viper 进行golang 应用的配置管理

golang模块viper读取配置文件

如何在 Golang 中使用动态键解析 YAML

使用golang解析yamljsonxml文件

Golang使用yaml第三方包无法正确解析配置参数