📜  Golang 中的 io.TeeReader()函数示例(1)

📅  最后修改于: 2023-12-03 14:41:33.971000             🧑  作者: Mango

Golang 中的 io.TeeReader() 函数示例

在 Golang 中,io 包提供了一系列函数用于处理输入和输出流。其中 io.TeeReader() 函数是一个非常有用的函数,用于同时读取输入流并将其复制到输出流中。

介绍

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

函数签名如下:

func TeeReader(r Reader, w Writer) Reader
示例

下面是一个示例程序,演示如何使用 io.TeeReader() 函数将输入流复制到输出流,并同时输出到标准输出:

package main

import (
	"fmt"
	"io"
	"os"
	"strings"
)

func main() {
	input := strings.NewReader("Hello, Golang!")
	output := os.Stdout

	reader := io.TeeReader(input, output)

	buf := make([]byte, 20)
	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])
}

在上面的示例中,我们使用 strings.NewReader() 创建了一个字符串输入流,并使用 os.Stdout 作为输出流。然后,我们通过 io.TeeReader() 函数创建了一个新的 Reader,该 Reader 可以同时读取输入流并将其复制到输出流中。

接下来,我们创建了一个缓冲区 buf,并使用 Reader.Read() 方法从 TeeReader 读取数据并将其存储到缓冲区中。最后,我们输出读取到的字节数和缓冲区的内容。

运行上述程序,将会输出以下结果:

Read 14 bytes: Hello, Golang!

可以看到,TeeReader 同时将输入数据传递给了输出流,并正确地将数据读取到缓冲区中。

总结

io.TeeReader() 函数是 Golang 中非常有用的一个函数,可以将输入流复制到输出流中,并返回一个新的 Reader。这使得我们可以同时对输入流进行处理并将其保存到输出流中,非常方便。

希望本示例对你理解和使用 io.TeeReader() 函数有所帮助!