io.MultiReader
连接两个或多个读卡器。因此,您可以从c1中读取(),然后使用多读取器“重放”已读取的字节。
package main
import (
"bytes"
"io"
"log"
"net"
)
func main() {
var c1, c2 net.Conn
buf := make([]byte, 64)
n, err := c1.Read(buf)
buf = buf[:n]
if err != nil {
log.Fatal(err)
}
// TODO: deal with string(buf)
errc := make(chan error, 2)
go func() {
// Replay contents of buf, then copy the unread part of c1.
_, err := io.Copy(c2, io.MultiReader(bytes.NewReader(buf), c1))
errc <- err
}()
go func() {
_, err := io.Copy(c1, c2)
errc <- err
}()
err = <-errc
log.Println(err)
}
或者,只需在开始复制之前写入()字节:
go func() {
// Replay contents of buf
_, err := c2.Write(buf)
if err != nil {
errc <- err
return
}
_, err = io.Copy(c2, c1)
errc <- err
}()