我正在开发一个流式 XML 编码器,它将同时将 XML 写入本地文件和 S3 存储桶。然而,通过测试它写入两个本地文件,我可以看到其中一个文件每次都缺少结束标签。
我大致是这样做的(省略错误处理):
func copyToFile (fileName string) {
f, _ := os.Create(fileName)
defer f.Close()
io.Copy(f, pr)
}
func main () {
pr, pw := io.Pipe()
defer pw.Close()
encoder := xml.NewEncoder(pw)
go copyToFile("file1.xml")
go copyToFile("file2.xml")
encoder.EncodeToken(xml.StartElement{...})
encoder.Encode(SomeStruct{})
encoder.EncodeToken(xml.EndElement{...})
encoder.Flush()
}
结果file1.xml符合预期,所有标签都正确关闭,但file2.xml关闭标签( 的调用encoder.EncodeToken(xml.EndElement{...}))丢失。
我究竟做错了什么?当我将阅读器复制到 S3 时,我能得到相同的结果吗?
牛魔王的故事
相关分类