我正在尝试使用 .yaml 进行简单的 YAML 解析gopkg.in/yaml.v2。
从文档:
映射和指针(指向结构、字符串、整数等)被接受为输出值。如果结构中的内部指针未初始化,则 yaml 包将在必要时初始化它以解组提供的数据。out 参数不能为零。
解码值的类型应与相应的值 in out 兼容。如果由于类型不匹配而无法对一个或多个值进行解码,则部分解码会继续直到 YAML 内容结束,并返回一个 *yaml.TypeError 以及所有缺失值的详细信息。
请注意此处的重要位:“如果 nec'y 则初始化结构内的指针”,以及“如果无法解码值,则返回 yaml.TypeError”。
现在:
包主
import (
"fmt"
"gopkg.in/yaml.v2"
)
type YamlTypeA struct {
D string `yaml: "d"`
E string `yaml: "e"`
}
type YamlTypeB struct {
F string `yaml: "f"`
}
type YamlTypeC struct {
TypeA *YamlTypeA `yaml: "a"`
TypeB []YamlTypeB `yaml: "b"`
}
func main() {
var yamlObj YamlTypeC
text := []byte(`
---
a:
d: foo
e: bar
b: [{f: "fails"},
{f: "completely"}]
`)
err := yaml.Unmarshal(text,&yamlObj)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Println("OK")
fmt.Printf("TypeA.D: %s\n", yamlObj.TypeA.D)
fmt.Printf("I have %d TypeB\n", len(yamlObj.TypeB))
}
产量
OK
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x4014b3]
这似乎违反了共同在文件中做出的承诺。如果我使嵌套的 YamlTypeA 立即而不是指针,结果是没有触及输出值,仍然没有错误:
OK
TypeA.D:
I have 0 TypeB
这里有什么?它只是坏了/记录不全吗?如何获取嵌套的结构值来解析 YAML?(使用地图的地图很麻烦,在这里根本不是解决方案。)
BIG阳
相关分类