1 回答
TA贡献1830条经验 获得超3个赞
返回的数据上不能有多个读取器io.PipeReader
,数据不会为所有读取器重复。只能io.PipeReader
“服务”一个读者,并且您启动 2 个 goroutine 来从中读取。
要实现您想要的效果,请使用io.MultiWriter()
. 它会向您返回一个io.Writer
可以写入的位置,并将写入内容复制到您传递给它的所有写入器。
例如:
f1 := &bytes.Buffer{}
f2 := &bytes.Buffer{}
w := io.MultiWriter(f1, f2)
encoder := xml.NewEncoder(w)
encoder.EncodeToken(xml.StartElement{Name: xml.Name{Local: "test"}})
encoder.Encode(image.Point{1, 2})
encoder.EncodeToken(xml.EndElement{Name: xml.Name{Local: "test"}})
encoder.Flush()
fmt.Println(f1)
fmt.Println(f2)
这将输出(在Go Playground上尝试):
<test><Point><X>1</X><Y>2</Y></Point></test>
<test><Point><X>1</X><Y>2</Y></Point></test>
上面的示例写入 2 个内存缓冲区。要写入 2 个文件,您可以将 2 传递给os.File
(或io.MultiWriter()
任何其他实现io.Writer
):
f1, err := os.Create("file1.xml")
if err != nil {
panic(err)
}
defer f1.Close()
f2, err := os.Create("file2.xml")
if err != nil {
panic(err)
}
defer f2.Close()
w := io.MultiWriter(f1, f2)
// ...
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报