1 回答

TA貢獻1828條經(jīng)驗 獲得超3個贊
您提供的 yaml 包含令牌錯誤。在此處驗證代碼中使用的 yaml https://codebeautify.org/yaml-validator/cbaabb32
之后創(chuàng)建結(jié)構(gòu)類型結(jié)果的變量而不是數(shù)組。因為您使用的 yaml 正在創(chuàng)建一個帶有 Runners 數(shù)組和 api_version 的結(jié)構(gòu)。
這
var runners []Result
應(yīng)該
var runners Result
因為因為結(jié)構(gòu)不是切片。獲取 yaml 中使用的函數(shù)名稱的命令列表。您需要遍歷 runners 數(shù)組以找到函數(shù)名稱并獲取該函數(shù)的命令值。下面是工作代碼:
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v2"
)
var runContent = []byte(`
api_ver: 1
runners:
- name: function1
type:
- command: spawn child process
- command: build
- command: gulp
- name: function2
type:
- command: run function 1
- name: function3
type:
- command: ruby build
- name: function4
type:
- command: go build
`)
type Result struct {
Version string `yaml:"api_ver"`
Runners []Runners `yaml:"runners"`
}
type Runners struct {
Name string `yaml:"name"`
Type []Command `yaml:"type"`
}
type Command struct {
Command string `yaml:"command"`
}
func main() {
var runners Result
// parse mta yaml
err := yaml.Unmarshal(runContent, &runners)
if err != nil {
log.Fatalf("Error : %v", err)
}
commandList := getCommandList("function1", runners.Runners)
fmt.Printf("%+v", commandList)
}
func getCommandList(name string, runners []Runners) []Command {
var commandList []Command
for _, value := range runners {
if value.Name == name {
commandList = value.Type
}
}
return commandList
}
- 1 回答
- 0 關(guān)注
- 248 瀏覽
添加回答
舉報