我正在开发一个流式 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 时,我可以期待相同的结果吗?