【发布时间】:2019-01-23 11:51:13
【问题描述】:
我有一个类似以下的 yaml,我需要使用 go 解析它。 当我尝试使用解析运行代码时,出现错误。 下面是代码:
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)
}
当我尝试解析它时,我收到一个错误invalid map,这里可能缺少什么?
【问题讨论】:
-
在 Go 中,您必须导出所有结构字段以进行编组/解组!
-
另外,从规范来看,您的结构从这里看起来不太好。
-
YAML 文档中的缩进不正确,与 Go 类型不匹配。
type可以是字符串、列表或映射。选一个。您还在 struct 标签中混合了 ASCII 和 unicode 引号。仅使用 ASCII。 -
您有一些“智能引号”,例如在这里:
yaml:”name”。如果这些在您的实际代码中(而不仅仅是此 StackOverflow sn-p 中的复制/粘贴事故),那么这会给您带来某种麻烦。