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

📅  最后修改于: 2021-10-25 03:04:40             🧑  作者: Mango

在 Go 语言中, io包为 I/O 原语提供基本接口。它的主要工作是封装这种原语之王的持续实现。 Go 语言中的TeeReader()函数用于返回一个“Reader”,它从指定的“r”中读取,然后将其写入指定的“w”。在这里,通过规定的“r”执行的所有读取都与对规定的“w”的等效写入进行比较。这种方法不需要任何内部缓冲,一旦读取完成,写入就完成了。而且,这个函数是在io包下定义的。在这里,您需要导入“io”包才能使用这些功能。

句法:

func TeeReader(r Reader, w Writer) Reader

这里,“r”是指定的Reader,“w”是指定的Writer。

返回值:它返回一个“Reader”,它从指定的“r”中读取,然后将其写入给定的“w”。但是,写入内容时遇到的任何错误都会作为读取错误返回。

下面的例子说明了上述方法的使用:

示例 1:

// Golang program to illustrate the usage of
// io.TeeReader() function
  
// Including main package
package main
  
// Importing fmt, io, strings, bytes, and os
import (
    "bytes"
    "fmt"
    "io"
    "os"
    "strings"
)
  
// Calling main
func main() {
  
    // Defining reader using NewReader method
    reader := strings.NewReader("GfG\n")
  
    // Defining buffer
    var buf bytes.Buffer
  
    // Calling TeeReader method with its parameters
    r := io.TeeReader(reader, &buf)
  
    // Calling Copy method with its parameters
    Reader, err := io.Copy(os.Stdout, r)
  
    // If error is not nil then panics
    if err != nil {
        panic(err)
    }
  
    // Prints output
    fmt.Printf("n: %v\n", Reader)
}

输出:

GfG
n: 4

在上面的例子中,Copy() 方法用于返回“Reader”,字符串的NewReader() 方法用于写入要读取的内容,并且这里还使用了外部缓冲区。

示例 2:

// Golang program to illustrate the usage of
// io.TeeReader() function
  
// Including main package
package main
  
// Importing fmt, io, strings, bytes, and os
import (
    "bytes"
    "fmt"
    "io"
    "os"
    "strings"
)
  
// Calling main
func main() {
  
    // Defining reader using NewReader method
    reader := strings.NewReader("GeeksforGeeks\nis\na\nCS-Portal.\n")
  
    // Defining buffer
    var buf bytes.Buffer
  
    // Calling TeeReader method with its parameters
    r := io.TeeReader(reader, &buf)
  
    // Calling Copy method with its parameters
    Reader, err := io.Copy(os.Stdout, r)
  
    // If error is not nil then panics
    if err != nil {
        panic(err)
    }
  
    // Prints output
    fmt.Printf("n: %v\n", Reader)
}

输出:

GeeksforGeeks
is
a
CS-Portal.
n: 30