【发布时间】:2022-01-31 01:07:01
【问题描述】:
我正在使用https://github.com/go-yaml/yaml 来解析 yaml 文件:
type TestConfig struct {
Test string `yaml:"test"`
}
yaml 文件:
test: 123
---
test: 456
但是 yaml.Unmarshal() 只解析第一段,我该如何解析剩下的呢?
【问题讨论】:
我正在使用https://github.com/go-yaml/yaml 来解析 yaml 文件:
type TestConfig struct {
Test string `yaml:"test"`
}
yaml 文件:
test: 123
---
test: 456
但是 yaml.Unmarshal() 只解析第一段,我该如何解析剩下的呢?
【问题讨论】:
但是 yaml.Unmarshal() 只解析第一段,我该如何解析剩下的呢?
yaml.Unmarshal's doc 说(强调我的):
Unmarshal 解码 第一个文档 在 in 字节切片中找到,并将解码后的值分配给 out 值。
如果您想解码一系列文档,请在数据流上调用yaml.NewDecoder(),然后多次调用解码器的.Decode(...)。使用io.EOF 标识记录的结尾。
为此,我通常使用带有break 条件的无限for 循环:
decoder := yaml.NewDecoder(bytes.NewBufferString(data))
for {
var d Doc
if err := decoder.Decode(&d); err != nil {
if err == io.EOF {
break
}
panic(fmt.Errorf("Document decode failed: %w", err))
}
fmt.Printf("%+v\n", d)
}
fmt.Printf("All documents decoded")
【讨论】: