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 關注
- 122 瀏覽
添加回答
舉報