在 Go 语言中, io包为 I/O 原语提供基本接口。它的主要工作是封装这种原语之王的持续实现。 Go 语言中的Pipe()函数用于创建并发内存管道,并且可以应用以将需要io.Reader的代码与需要io.Writer的代码链接起来。在这里,管道上的读取和写入是一对一配对的,除非需要多个“读取”来进行单个“写入”。这表明对PipeWriter 的每次写入都会停止,直到它满足来自PipeReader 的一次或多次读取,该读取完全获取写入的数据。
但是,数据会立即从写入到相关读取进行跟踪,并且内部没有缓冲。而且,这个函数是在io包下定义的。在这里,您需要导入“io”包才能使用这些功能。
句法:
func Pipe() (*PipeReader, *PipeWriter)
这里,“PipeReader”是指向 PipeReader 的指针。其中 PipeReader 是管道的读取部分,“PipeWriter”是指向 PipeWriter 的指针。其中 PipeWriter 是管道的写入部分。
返回值:它返回一个指向 PipeReader 和 PipeWriter 的指针。
注意:同时或使用 Close 调用 Read 和 Write 是安全的。但是,对 Read 的并行调用和对 Write 的并行调用也受到保护。单独的调用将依次关闭。
示例 1:
// Golang program to illustrate the usage of
// io.Pipe() function
// Including main package
package main
// Importing fmt, io, and bytes
import (
"bytes"
"fmt"
"io"
)
// Calling main
func main() {
// Calling Pipe method
pipeReader, pipeWriter := io.Pipe()
// Using Fprint in go function to write
// data to the file
go func() {
fmt.Fprint(pipeWriter, "Geeks\n")
// Using Close method to close write
pipeWriter.Close()
}()
// Creating a buffer
buffer := new(bytes.Buffer)
// Calling ReadFrom method and writing
// data into buffer
buffer.ReadFrom(pipeReader)
// Prints the data in buffer
fmt.Print(buffer.String())
}
输出:
Geeks
示例 2:
// Golang program to illustrate the usage of
// io.Pipe() function
// Including main package
package main
// Importing fmt, io, and bytes
import (
"bytes"
"fmt"
"io"
)
// Calling main
func main() {
// Calling Pipe method
pipeReader, pipeWriter := io.Pipe()
// Using Fprint in go function to write
// data to the file
go func() {
fmt.Fprint(pipeWriter, "GeeksforGeeks\nis\na\nCS-Portal.\n")
// Using Close method to close write
pipeWriter.Close()
}()
// Creating a buffer
buffer := new(bytes.Buffer)
// Calling ReadFrom method and writing
// data into buffer
buffer.ReadFrom(pipeReader)
// Prints the data in buffer
fmt.Print(buffer.String())
}
输出:
GeeksforGeeks
is
a
CS-Portal.