1 回答

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
- 1 回答
- 0 關(guān)注
- 216 瀏覽
添加回答
舉報(bào)