第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Go 中保留 YAML 文件中的順序

在 Go 中保留 YAML 文件中的順序

Go
呼如林 2023-01-03 17:23:47
我正在嘗試讀取如下所示的 YAML 文件中的數(shù)據(jù):Category Name:  Task 1:    Name: Meeting    PM: 1    TC: 0    STC: 1    Optional: false一個(gè)類別中可以有多個(gè)任務(wù),也可以有多個(gè)類別。我最初是這樣閱讀 YAML 文件的。type Task struct {    Name     string    PM       string    TC       string    STC      string    Optional bool}type Category struct {    Name  string    Tasks []Task}func parseFile() map[string]map[string]map[string]string {    file, err := ioutil.ReadFile("config.yaml")    if err != nil {        log.Fatal(err)    }    data := make(map[string]map[string]map[string]string)    err1 := yaml.Unmarshal(file, &data)    if err1 != nil {        log.Fatal(err1)    }    return data}然后我只有一個(gè)函數(shù)來循環(huán)遍歷在 parseFile() 中創(chuàng)建的地圖,并創(chuàng)建一個(gè)包含填充信息的類別列表。這很好用……除了由于地圖未排序而未保留 YAML 文件中寫入的類別/任務(wù)的順序之外。通過在線閱讀,我發(fā)現(xiàn)您可以使用來自 gokpg.in/yaml.v2 的 yaml.MapSlice{} 來保留順序。但是,我不知道如何處理生成的 MapSlice。我可以遍歷它以獲取類別,但我無法遍歷 .Value,因?yàn)?MapItems 是接口,但 MapItems 會(huì)存儲(chǔ)我的任務(wù)列表。我該怎么做才能獲得任務(wù)并放入 []Task?感謝幫助 :)
查看完整描述

1 回答

?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

我設(shè)法通過更改我的 YAML 和結(jié)構(gòu)的格式來解決這個(gè)問題,然后直接解組到結(jié)構(gòu)中。


新的結(jié)構(gòu)。


type Categories struct {

    Category []struct {

        Name string `yaml:"CategoryName"`

        Task []struct {

            Name     string  `yaml:"TaskName"`

            PM       float64 `yaml:"PM"`

            TC       float64 `yaml:"TC"`

            STC      float64 `yaml:"STC"`

            Optional bool    `yaml:"Optional"`

        } `yaml:"Tasks"`

    } `yaml:"Categories"`

}

YAML 文件的新格式以支持結(jié)構(gòu)中的內(nèi)容。


Categories:

  - CategoryName: Category 1

    Tasks:

      - TaskName: Test 1

        PM: 1

        TC: 0

        STC: 1

        Optional: false

      - TaskName: Test 2

        PM: 2

        TC: 0

        STC: 2

        Optional: false

  - CategoryName: Category 2

    Tasks:

      - TaskName: Test 3

        PM: 1

        TC: 2

        STC: 3

        Optional: true

將 YAML 文件直接解組為新結(jié)構(gòu)


var tasks Categories

    file, err := ioutil.ReadFile("config.yaml")


    if err != nil {

        log.Fatal(err)

    }


    yaml.Unmarshal(file, &tasks)

這解決了我的問題 - 不再使用地圖以便保留順序并以我發(fā)現(xiàn)易于循環(huán)的方式使用結(jié)構(gòu)。


查看完整回答
反對(duì) 回復(fù) 2023-01-03
  • 1 回答
  • 0 關(guān)注
  • 293 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)