登录
首页 >  Golang >  Go问答

遇到解析 YAML 结构的问题

来源:stackoverflow

时间:2024-03-09 16:54:23 441浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《遇到解析 YAML 结构的问题》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我有一个我认为非常简单的 yaml 结构,我正在尝试写入文件和从文件中读取。

appname:
   version: 1.2.3.4
   md5_checksum: 987654321

我真的很难理解嵌套结构以及它们与 yaml 封送处理的关系。

此时我有以下内容:

type application struct {
    name     string `yaml:"application"`
    version  string `yaml:"version"`
    checksum int    `yaml:"md5_checksum"`
}

yamldata := application{"myprogram", "1.2.3.4", 34235234123}
y, err := yaml.marshal(yamldata)
if err != nil {
    log.fatal("yaml marshal failed")
}

err = ioutil.writefile("applications.yaml", y, 0644)
if err != nil {
    log.fatal("file write failed")
}

这让我很接近,但文件内容如下:

application: MyProgram
version: 1.2.3.4
md5_checksum: 34235234123

这看起来不错,但是这个文件将由许多应用程序填充。我尝试了几种类型的嵌套结构,但我对如何在最终构建它们时向它们提供值感到困惑。


解决方案


在 kibgzr 的帮助下我解决了自己的问题。

仅对于编组步骤不需要结构。

yamldata := map[string]map[string]string{
    appname: map[string]string{"version": appversion, "md5_checksum": checksumstring},
}

我创建了一个嵌套映射而不是一个结构。这允许我在收集所有值时初始化映射,而不是尝试解决结构字段名称。我的输出现在是:

appname:
  md5_checksum: checksumstring
  version: appversion

感谢您的帮助!

您可以将应用程序结构定义为

type appversion struct {
    version  string `yaml:"version"`
    checksum int    `yaml:"md5_checksum"`
}

type application struct {
    name appversion `yaml:"appname"`
}

然后调用 appversion

yamlData := Application{Name: AppVersion{Version: "1.2.3.4", Checksum: 34235234123}}

今天关于《遇到解析 YAML 结构的问题》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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