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!