为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中仅解析 YAML 文件中的某些键

在 Golang 中仅解析 YAML 文件中的某些键

Go
神不在的星期二 2023-02-14 18:28:31
我有一个 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, &params); err != nil {        return nil, fmt.Errorf("could not parse yaml from file. %w", err)    }    return &params, 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 或结构字段中键的顺序与最终未编组的输出无关。

在Go 操场上查看带有go-yaml库的示例


查看完整回答
反对 回复 2023-02-14
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信