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

📅  最后修改于: 2021-10-25 02:12:45             🧑  作者: Mango

在 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.