I have a YAML file that I am reading in in Golang and unmarshaling to a struct. The file contains several keys, but I only need certain ones. What I am finding is that if I place the keys that aren't needed for this application at the bottom of the YAML file, everything works as expected, but if the keys are in random order, the unmarshaling / parsing returns unexpected values. For example:
Sample Simple YAML file:
---
cat_name: rusty
dog_name: billy
cat_food: Purina
dog_food: Blue
cat_rescued: true
dog_rescued: false
cat_age: 4
dog_age: 6
happy: true
type MyStruct struct {
Happy bool `yaml:"happy"`
CatName string `yaml:"cat_name"`
CatAge int `yaml:"cat_age"`
}
Code that does the unmarshaling:
data, err := ioutil.ReadFile(filename)
if err != nil {
return nil, fmt.Errorf("Could not read file %s. An error has occurred: %w", filename, err)
}
params := MyStruct{}
if err = yaml.Unmarshal(data, ¶ms); err != nil {
return nil, fmt.Errorf("could not parse yaml from file. %w", err)
}
return ¶ms, nil
What I am finding is that, I will get back the correct CatName, but that the other two fields (Happy and CatAge) will be false and 0, respectively.
However, if I change the ordering of the keys in the yaml file so that the three keys that I need for MyStruct are the top three in the YAML file, I will get back the expected data of true and 4.
I am pretty new to Golang and am wondering, after doing a lot of searching and experimentation, what I am missing? I am using the https://github.com/goccy/go-yaml library to do the unmarshaling. Is it expected when unmarshaling YAML to a struct that the order of the keys in the YAML file are in the same order as the struct fields? Thanks in advance.