Golang io.Pipe()函數及示例

https://geek-docs.com/go-tutorials/go-examples/g_io-pipe-function-in-golang-with-examples.html

 

在Go語言中,io包提供了基本的I/O原語接口,其主要工作是封裝這些原語的正在進行的實現。Go語言中的 Pipe() 函數用於創建併發的內存管道,在將期望io.Reader的代碼與期望io.Writer的代碼鏈接時可應用此函數。在這裏,管道上的讀取和寫入一對一成對,除非需要多次“讀取”才能進行一次“寫入”。這表示,每次向管道寫入數據時,寫入PipeWriter的操作將停止,直到PipeReader從完全接收寫入的數據中滿足了一個或多個讀取操作。

然而,數據會直接從寫入傳輸到相關讀取操作中,且不進行內部緩衝。此外,這個函數是在io包中定義的。在這裏,您需要導入“io”包才能使用這些函數。

語法:

func Pipe() (*PipeReader, *PipeWriter)
Go
 

在這裏,“PipeReader”是指向PipeReader的指針。其中PipeReader是管道的讀取半部分,而“PipeWriter”是指向PipeWriter的指針。其中PipeWriter是管道的寫入半部分。

返回值: 它返回指向PipeReader和PipeWriter的指針。

注意: 同時或同時與Close調用同時調用Read和Write是安全的。然而,同時調用Read的並行調用和同時調用Write的並行調用也是安全的。單個調用將按順序關閉。

示例1:

// Golang程序演示
// io.Pipe()函數的使用
  
// 導入主要軟件包
package main
  
//導入fmt、io和bytes
import (
    "bytes"
    "fmt"
    "io"
)
  
// 調用主要程序
func main() {
  
    //調用Pipe方法
    pipeReader, pipeWriter := io.Pipe()
  
    //使用go函數中的Fprint將數據寫入文件
    go func() {
        fmt.Fprint(pipeWriter, "Geeks\n")
  
        //使用Close方法關閉寫
        pipeWriter.Close()
    }()
  
    //創建緩衝區
    buffer := new(bytes.Buffer)
  
    //調用ReadFrom方法向緩衝區寫入數據
    buffer.ReadFrom(pipeReader)
  
    //打印緩衝區中的數據
    fmt.Print(buffer.String())
} 
Go
 

輸出:

Geeks
Go
 

示例2:

// Golang程序演示
// io.Pipe()函數的使用
  
// 導入主要軟件包
package main
  
//導入fmt、io和bytes
import (
    "bytes"
    "fmt"
    "io"
)
  
// 調用主要程序
func main() {
  
    //調用Pipe方法
    pipeReader, pipeWriter := io.Pipe()
  
    //使用go函數中的Fprint將數據寫入文件
    go func() {
        fmt.Fprint(pipeWriter, "GeeksforGeeks\nis\na\nCS-Portal.\n")
  
        //使用Close方法關閉寫
        pipeWriter.Close()
    }()
  
    //創建緩衝區
    buffer := new(bytes.Buffer)
  
    //調用ReadFrom方法向緩衝區寫入數據
    buffer.ReadFrom(pipeReader)
  
    //打印緩衝區中的數據
    fmt.Print(buffer.String())
} 
Go
 

輸出:

GeeksforGeeks
is
a
CS-Portal.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章