Golang io.MultiWriter() 函数及其示例

Golang io.MultiWriter() 函数及其示例

Go 语言中,io 包提供了 I/O 基本接口的实现,而它的主要任务是封装这些类型基元的实现。Go 语言中的 MultiWriter() 函数用于创建一个 writer,将写入复制到每个给定的 writer,就像 Unix 命令 tee(1)一样。在这里,每次的写操作都会被逐个写入到每个包含的 writer 中。此外,该函数是在 io 包中定义的。在使用这些函数之前,需要导入“io”包。

语法:

func MultiWriter(writers ...Writer) Writer

在这里,“writers”是在此函数中作为参数指定的 writer 数量。

返回值: 它返回一个写入器(writer),其中包含指定缓冲区中的字节数,并在需要时返回一个错误。如果任何一个指定的 writer 返回了错误,则整个写操作将停止,而不会继续向下执行。

示例 1:

// Golang program to illustrate the usage of
// io.MultiWriter() function
  
// Including main package
package main
  
// Importing fmt, io, bytes, and strings
import (
    "bytes"
    "fmt"
    "io"
    "strings"
)
  
// Calling main
func main() {
  
    // Defining reader using NewReader method
    reader := strings.NewReader("Geeks")
  
    // Defining two buffers
    var buffer1, buffer2 bytes.Buffer
  
    // Calling MultiWriter method with its parameters
    writer := io.MultiWriter(&buffer1, &buffer2)
  
    // Calling Copy method with its parameters
    n, err := io.Copy(writer, reader)
  
    // If error is not nil then panics
    if err != nil {
        panic(err)
    }
  
    // Prints output
    fmt.Printf("缓冲区中的字节数: %v\n", n)
    fmt.Printf("Buffer1: %v\n", buffer1.String())
    fmt.Printf("Buffer2: %v\n", buffer2.String())
} 

输出:

缓冲区中的字节数:5
Buffer1: Geeks
Buffer2: Geeks

在这里,Copy() 方法用于返回缓冲区中包含的字节数。此外,两个缓冲区的内容相同,因为指定的 writer 将其写入复制到其他所有 writer 中。

示例 2:

// Golang program to illustrate the usage of
// io.MultiWriter() function
  
// Including main package
package main
  
// Importing fmt, io, bytes, and strings
import (
    "bytes"
    "fmt"
    "io"
    "strings"
)
  
// Calling main
func main() {
  
    // Defining reader using NewReader method
    reader := strings.NewReader("GeeksforGeeks\nis\na\nCS-Portal!")
  
    // Defining two buffers
    var buffer1, buffer2 bytes.Buffer
  
    // Calling MultiWriter method with its parameters
    writer := io.MultiWriter(&buffer1, &buffer2)
  
    // Calling Copy method with its parameters
    n, err := io.Copy(writer, reader)
  
    // If error is not nil then panics
    if err != nil {
        panic(err)
    }
  
    // Prints output
    fmt.Printf("缓冲区中的字节数: %v\n", n)
    fmt.Printf("Buffer1: %v\n", buffer1.String())
    fmt.Printf("Buffer2: %v\n", buffer2.String())
} 

输出:

缓冲区中的字节数:29
Buffer1: GeeksforGeeks
is
a
CS-Portal!
Buffer2: GeeksforGeeks
is
a
CS-Portal!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程