我有一个 YAML 文件,我正在 Golang 中读取它并将其解组为一个结构。该文件包含几个密钥,但我只需要某些密钥。我发现的是,如果我将此应用程序不需要的键放在 YAML 文件的底部,一切都会按预期工作,但如果键是随机顺序,则解组/解析会返回意外值。例如:
示例简单 YAML 文件:
---
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"`
}
执行解组的代码:
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
我发现的是,我将取回正确的CatName,但其他两个字段(Happy和CatAge)将分别为false和0。
但是,如果我更改 yaml 文件中键的顺序,使我需要的三个键MyStruct位于 YAML 文件中的前三个,我将取回true和的预期数据4。
我对 Golang 很陌生,想知道在进行了大量搜索和实验之后,我缺少什么?我正在使用该https://github.com/goccy/go-yaml库进行解组。将 YAML 解组为结构时,是否期望 YAML 文件中键的顺序与结构字段的顺序相同?提前致谢。