无法整理YAML结构

I have what I think is a very straightforward YAML structure I'm attempting to write to and read from a file.

appName:
   version: 1.2.3.4
   md5_checksum: 987654321

And I'm really struggling to understand nested structs and how they relate to yaml marshaling.

At this point I have the following:

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

This gets me close, but the file reads as follows:

application: MyProgram
version: 1.2.3.4
md5_checksum: 34235234123

That looks nice, but this file will be populated by many applications. I've tried a few types of nested structs, but I get hung up on how to supply values to them when finally building them.

I've solved my own problem with help from KibGzr.

No structs necessary just for the marshaling steps.

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

I've created a nested map rather than a struct. This allows me just initialize the map when I've collected all my values rather than trying to work around struct field names. My output is now:

appName:
  md5_checksum: checksumString
  version: appVersion

Thanks for all the help!

You can define Application struct as

type AppVersion struct {
    Version  string `yaml:"version"`
    Checksum int    `yaml:"md5_checksum"`
}

type Application struct {
    Name AppVersion `yaml:"appName"`
}

Then call AppVersion as

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