登录
首页 >  Golang >  Go问答

如何使用任意键解析 YAML

来源:stackoverflow

时间:2024-04-12 10:15:33 277浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《如何使用任意键解析 YAML》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我正在尝试读取 yaml 文件,就像我在 python 中所做的那样。但我不知道如何使用任意键。 我想阅读以下 yaml:

apple:
  name: item1
banana:
  name: item2

我知道如何读取文件,但只使用空接口。我想将其作为我的项目类型的映射来读取。

package main

import (
    "fmt"
    "log"
    "gopkg.in/yaml.v2"
)

type item struct {
    name string `yaml:"name"`
}

func main() {
    input := `
  apple:
    name: item1
  banana:
    name: item2`

    m := make(map[interface{}]interface{})

    err := yaml.unmarshal([]byte(input), &m)
    if err != nil {
        log.fatalf("error: %v", err)
    }
    fmt.printf("%v \n", m)
}

我在标准输出中得到的内容:

map[apple:map[name:item1] banana:map[name:item2]]

我希望看到的是:

map[apple:{item1} banana:{item2}]

如何将我的 yaml 文件读入项目映射?


解决方案


为了使解组按照您想要的方式工作,您应该提供说明。在您的情况下,如果您不想名称出现在地图中,请提供一个结构体来解组。

所以 m := make(map[interface{}]interface{}) 应更改为 m := make(map[string]item)

package main

import (
    "fmt"
    "log"
    "gopkg.in/yaml.v2"
)

type Item struct {
    Name string `yaml:"name"`
}

func main() {
    input := `
  apple:
    name: item1
  banana:
    name: item2`

    m := make(map[string]Item)

    err := yaml.Unmarshal([]byte(input), &m)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("%v \n", m)
}

输出:map[apple:{item1} banana:{item2}]

您应该使用 m := make(map[string]item)

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>