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

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

在 golang 中解析 yaml 時(shí)出錯(cuò)

在 golang 中解析 yaml 時(shí)出錯(cuò)

Go
躍然一笑 2023-03-21 15:19:28
我有一個(gè)像下面這樣的 yaml,我需要使用 go 來解析它。當(dāng)我嘗試使用解析運(yùn)行代碼時(shí)出現(xiàn)錯(cuò)誤。下面是代碼:var runContent= []byte(`- runners:   - name: function1     type: func1      - command: spawn child process      - command: build      - command: gulp  - name: function1    type: func2      - command: run function 1  - name: function3    type: func3      - command: ruby build  - name: function4    type: func4      - command: go build `)這些是類型:type Runners struct {    runners string `yaml:"runners"`        name string `yaml:”name”`        Type: string  `yaml: ”type”`        command  [] Command }type Command struct {    command string `yaml: ”command”`}runners := Runners{}err = yaml.Unmarshal(runContent, &runners)if err != nil {    log.Fatalf("Error : %v", err)}當(dāng)我嘗試解析它時(shí)出現(xiàn)錯(cuò)誤invalid map,這里可能遺漏了什么?
查看完整描述

1 回答

?
烙印99

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

您發(fā)布的代碼包含多個(gè)錯(cuò)誤,包括 struct field Type。您的代碼中提供的 yaml 無效。這將導(dǎo)致在將 yaml 解組為結(jié)構(gòu)時(shí)出錯(cuò)。

在 go 中解組 yaml 時(shí),要求:

解碼值的類型應(yīng)與輸出中的相應(yīng)值兼容。如果一個(gè)或多個(gè)值由于類型不匹配而無法解碼,解碼將繼續(xù)部分進(jìn)行,直到 YAML 內(nèi)容結(jié)束,并返回一個(gè) *yaml.TypeError,其中包含所有缺失值的詳細(xì)信息。

與此同時(shí):

結(jié)構(gòu)字段只有在導(dǎo)出時(shí)才會被解組(首字母大寫),并且使用小寫的字段名稱作為默認(rèn)鍵進(jìn)行解組。

定義標(biāo)簽時(shí)也有錯(cuò)誤yaml,其中包含空格。自定義鍵可以通過字段標(biāo)簽中的“yaml”名稱來定義:第一個(gè)逗號之前的內(nèi)容用作鍵。

type Runners struct {


    runners string `yaml:"runners"` // fields should be exportable

        name string `yaml:”name”`

        Type: string  `yaml: ”type”` // tags name should not have space in them.

        command  [] Command 

要使結(jié)構(gòu)可導(dǎo)出,請將結(jié)構(gòu)和字段轉(zhuǎn)換為大寫首字母并刪除 yaml 標(biāo)簽名稱中的空格:


type Runners struct {

    Runners string `yaml:"runners"`

    Name string `yaml:"name"`

    Type string `yaml:"type"`

    Command  []Command 

}


type Command struct {

    Command string `yaml:"command"`

}

修改下面的代碼以使其工作。


package main


import (

    "fmt"

    "log"


    "gopkg.in/yaml.v2"

)


var runContent = []byte(`

- runners:

  - name: function1

    type:

    - command: spawn child process

    - command: build

    - command: gulp

  - name: function1

    type:

    - command: run function 1

  - name: function3

    type:

    - command: ruby build

  - name: function4

    type:

    - command: go build

`)


type Runners []struct {

    Runners []struct {

        Type []struct {

            Command string `yaml:"command"`

        } `yaml:"type"`

        Name string `yaml:"name"`

    } `yaml:"runners"`

}


func main() {


    runners := Runners{}

    // parse mta yaml

    err := yaml.Unmarshal(runContent, &runners)

    if err != nil {

        log.Fatalf("Error : %v", err)

    }

    fmt.Println(runners)

}

游樂場示例

在此處在線驗(yàn)證您的 yaml https://codebeautify.org/yaml-validator/cb92c85b


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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