我有一個 YAML 文件,我正在 Golang 中讀取它并將其解組為一個結(jié)構(gòu)。該文件包含幾個密鑰,但我只需要某些密鑰。我發(fā)現(xiàn)的是,如果我將此應(yīng)用程序不需要的鍵放在 YAML 文件的底部,一切都會按預(yù)期工作,但如果鍵是隨機順序,則解組/解析會返回意外值。例如:示例簡單 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"`}執(zhí)行解組的代碼: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我發(fā)現(xiàn)的是,我將取回正確的CatName,但其他兩個字段(Happy和CatAge)將分別為false和0。但是,如果我更改 yaml 文件中鍵的順序,使我需要的三個鍵MyStruct位于 YAML 文件中的前三個,我將取回true和的預(yù)期數(shù)據(jù)4。我對 Golang 很陌生,想知道在進行了大量搜索和實驗之后,我缺少什么?我正在使用該https://github.com/goccy/go-yaml庫進行解組。將 YAML 解組為結(jié)構(gòu)時,是否期望 YAML 文件中鍵的順序與結(jié)構(gòu)字段的順序相同?提前致謝。
1 回答

HUWWW
TA貢獻1874條經(jīng)驗 獲得超12個贊
我發(fā)現(xiàn)的是,我將取回正確的 CatName,但其他兩個字段(Happy 和 CatAge)將分別為 false 和 0。
不,上面的假設(shè)是不正確的。根據(jù)您擁有的定義和代碼,所有必填字段都應(yīng)按預(yù)期更新,并且 YAML 或結(jié)構(gòu)字段中鍵的順序與最終未編組的輸出無關(guān)。
- 1 回答
- 0 關(guān)注
- 159 瀏覽
添加回答
舉報
0/150
提交
取消