Golang io.PipeReader.Read()函数及示例

Golang io.PipeReader.Read()函数及示例

在Go语言中,io包提供了I / O基元的基本接口。它的主要工作是封装这种原语的正在进行的实现。 PipeReader.Read() 函数在Go语言中用于实现标准读取接口。它从管道中读取信息并阻塞它,直到出现写入器或管道的写入端关闭。此外,此函数在io包中定义。在此,您需要导入“io”包以使用这些函数。

语法:

func (r *PipeReader)Read(data []byte)(n int, err error)

在这里,“r”是指向PipeReader的指针。在这里,PipeReader是管道的读取一半,“data”是指定长度的字节切片,写入的数据被读取到其中。

返回值: 它返回读取的字节数和任何错误。但是,如果使用错误关闭管道的写入端,则将该错误返回为err,否则返回的err是EOF错误。

示例1:

// Golang程序展示用法
// io.PipeReader.Read()函数
     
// 包括主包
package main
     
// 导入fmt和io
import (
      "fmt"
      "io"
)
     
// 调用main
func main() {
     
    // 调用Pipe方法
    pipeReader,pipeWriter:=io.Pipe()
     
    // 将数据写入管道
    go func() {
        pipeWriter.Write([]byte(“GfG”))
        pipeWriter.Write([]byte(“GeeksforGeeks”))
        pipeWriter.Write([]byte(“ GfG是一个CS门户”))
     
        // 关闭管道的写入一半
        pipeWriter.Close()
     
        // 再次调用Write方法
        pipeWriter.Write([]byte("作者!"))
    }()
     
    // 定义Read方法的数据参数
    data:= make([] byte,20)
     
    // 使用for循环
    for i:= 0; i<3; i ++ {
     
        // 调用pipeReader.Read()方法
        n,err:= pipeReader.Read(data)
     
        // 如果错误不为nil恐慌
        如果err!= nil {
            panic(err)
        }
     
        // 打印缓冲区中读取的内容
        fmt.Printf(“%s \ n”,数据【:n】)
     
        // 打印读取的字节数
        fmt.Printf(“%v \ n”,n)
    }
} ```  

输出:

GfG
3
GeeksforGeeks
13
GfG是一个CS门户。
19

在这里,由于“for”循环运行期间未关闭管道的写入端,因此不返回任何错误。

示例2:

// Golang程序展示用法
// io.PipeReader.Read()函数
     
// 包括主包
package main
     
// 导入fmt和io
import (
      "fmt"
      "io"
)
     
// 调用main
func main() {
     
    // 调用Pipe方法
    pipeReader,pipeWriter:=io.Pipe()
    // 将数据写入管道
    go func() {
        pipeWriter.Write([]byte(“GfG”))
        pipeWriter.Write([]byte(“GeeksforGeeks”))
        pipeWriter.Write([]byte(“ GfG是一个CS门户”))
     
        // 关闭管道的写入一半
        pipeWriter.Close()
     
        // 再次调用Write方法
        pipeWriter.Write([]byte("作者!"))
    }()
     
    // 定义Read方法的数据参数
    data:= make([] byte,20)
     
    // 使用for循环
    for i:= 0; i<4; i ++ {
     
        // 调用pipeReader.Read()方法
        n,err:= pipeReader.Read(data)
     
        // 如果错误不为nil恐慌
        如果err!= nil {
            panic(err)
        }
     
        // 打印缓冲区中读取的内容
        fmt.Printf(“%s \ n”,数据【:n】)
     
        // 打印读取的字节数
        fmt.Printf(“%v \ n”,n)
    }
} ```  

输出:

GfG
3
GeeksforGeeks
13
GfG是一个CS门户网站。
19
panic: EOF(文件结尾错误)

goroutine 1 [正在运行]:
main.main()
    /tmp/sandbox634835876/prog.go:43 +0x364

在这里,由于管道的写端在for循环的第三次迭代后被关闭,导致发生EOF错误。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程