io.TeeReader() 函数用于同时读取输入流并将其复制到输出流中。

io.TeeReader() 函数的作用是将一个输入流 Reader 复制到一个输出流 Writer 中,并返回一个新的 Reader,该 Reader 可以同时读取输入流并将其复制到输出流中。这在需要同时对输入流进行处理并将其保存到输出流中时非常方便。

函数定义

1
func TeeReader(r Reader, w Writer) Reader

使用示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import (
	"io"
	"log"
	"os"
	"strings"
)

func main() {
    // 创建了一个字符串输入流,并使用 os.Stdout 作为输出流
	var input = strings.NewReader("some io.Reader stream to be read\n")
    output := os.Stdout

    // 创建了一个新的 Reader, 这个 Reader 可以同时读取输入流并将其复制到输出流中
	reader = io.TeeReader(input, output)

	// Everything read from reader will be copied to stdout.
	// if _, err := io.ReadAll(reader); err != nil {
	// 	log.Fatal(err)
	// }

    // 创建了一个缓冲区 buf,并使用 Reader.Read() 方法从 TeeReader 读取数据并将其存储到缓冲区中
    buf := make([]byte, input.Len())
	n, err := reader.Read(buf)
	if err != nil && err != io.EOF {
		fmt.Println("Error:", err)
		return
	}

	fmt.Printf("Read %d bytes: %s\n", n, buf[:n])
}

参考