我有一个 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: truetype 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 文件中键的顺序与结构字段的顺序相同?提前致谢。
1 回答
HUWWW
TA贡献1874条经验 获得超12个赞
我发现的是,我将取回正确的 CatName,但其他两个字段(Happy 和 CatAge)将分别为 false 和 0。
不,上面的假设是不正确的。根据您拥有的定义和代码,所有必填字段都应按预期更新,并且 YAML 或结构字段中键的顺序与最终未编组的输出无关。
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消