1

私は、XML をローカル ファイルと S3 バケットに同時に書き込むストリーミング XML エンコーダーに取り組んでいます。ただし、2 つのローカル ファイルへの書き込みをテストするだけで、ファイルの 1 つに毎回終了タグがないことがわかります。

これが大まかな方法​​です(エラー処理を省略しています):

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 にコピーすると、同じ結果を期待できますか?

4

1 に答える 1