我有一个 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, &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 文件中键的顺序与结构字段的顺序相同?提前致谢。