【发布时间】:2021-05-19 15:39:51
【问题描述】:
我正在尝试使用gopkg.in/yaml.v3 来读取包含
多个 YAML 文档,然后编组每个单独的文档
回到 YAML。我的示例输入如下所示:
name: doc1
---
name: doc2
---
name: doc3
我能够很好地解组文件,但我遇到了意外 尝试编组单个文档时出错。我的代码看起来 喜欢:
package main
import (
"errors"
"fmt"
"io"
"os"
"gopkg.in/yaml.v3"
)
func main() {
reader := io.Reader(os.Stdin)
dec := yaml.NewDecoder(reader)
for {
var node yaml.Node
err := dec.Decode(&node)
if errors.Is(err, io.EOF) {
break
}
if err != nil {
panic(err)
}
content, err := yaml.Marshal(node)
if err != nil {
panic(err)
}
fmt.Printf("Found a doc\n\n%s\n", content)
}
}
使用示例输入运行此代码会导致:
panic: yaml: expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got document start
goroutine 1 [running]:
main.main()
/home/lars/projects/operate-first/halberd/main.go:31 +0x451
代码似乎正确地解析文档;如果我更换它 与:
package main
import (
"errors"
"fmt"
"io"
"os"
"gopkg.in/yaml.v3"
)
func main() {
reader := io.Reader(os.Stdin)
dec := yaml.NewDecoder(reader)
for {
var node yaml.Node
err := dec.Decode(&node)
if errors.Is(err, io.EOF) {
break
}
if err != nil {
panic(err)
}
fmt.Printf("Found a doc\n")
}
}
我最终得到了我的期望:
Found a doc
Found a doc
Found a doc
这个问题只会在编组时出现。我是否正确使用了 v3 api?
【问题讨论】: