1 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
返回的數(shù)據(jù)上不能有多個(gè)讀取器io.PipeReader
,數(shù)據(jù)不會(huì)為所有讀取器重復(fù)。只能io.PipeReader
“服務(wù)”一個(gè)讀者,并且您啟動(dòng) 2 個(gè) goroutine 來(lái)從中讀取。
要實(shí)現(xiàn)您想要的效果,請(qǐng)使用io.MultiWriter()
.?它會(huì)向您返回一個(gè)io.Writer
可以寫(xiě)入的位置,并將寫(xiě)入內(nèi)容復(fù)制到您傳遞給它的所有寫(xiě)入器。
例如:
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>
上面的示例寫(xiě)入 2 個(gè)內(nèi)存緩沖區(qū)。要寫(xiě)入 2 個(gè)文件,您可以將 2 傳遞給os.File
(或io.MultiWriter()
任何其他實(shí)現(xiàn)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 關(guān)注
- 132 瀏覽
添加回答
舉報(bào)