无法整理YAML结构

时间:2018-11-26 00:19:20

标签: go struct 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

这看起来不错,但是许多应用程序将填充此文件。我已经尝试了几种类型的嵌套结构,但是当最终构建它们时,我迷上了如何为它们提供值。

2 个答案:

答案 0 :(得分:0)

您可以将Application结构定义为

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

答案 1 :(得分:0)

我已经在KibGzr的帮助下解决了自己的问题。

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

yamlData := map[string]map[string]string{
    appName: map[string]string{"version": appVersion, "md5_checksum": checksumString},
}

我创建了一个嵌套的地图而不是一个结构。这样,我就可以在收集所有值后初始化映射,而不必尝试处理结构字段名称。现在我的输出是:

appName:
  md5_checksum: checksumString
  version: appVersion

感谢所有帮助!