io.PipeReader.Close() Function in Golang with Examples
Last Updated :
10 May, 2020
In Go language, io packages supply fundamental interfaces to the I/O primitives. And its principal job is to enclose the ongoing implementations of such king of primitives. The PipeReader.Close() function in Go language is used to close the reader. However, successive writes to the PipeWriter i.e, write half of the pipe will return the ErrClosedPipe error. Moreover, this function is defined under the io package. Here, you need to import the “io” package in order to use these functions.
Syntax:
func (r *PipeReader) Close() error
Here, “r” is a pointer to the PipeReader. Where PipeReader is the read half of a pipe.
Return value: It returns the content written before calling Close method. And successive writes to the PipeWriter i.e, write half of the pipe will return the ErrClosedPipe error.
Example 1:
package main
import (
"fmt"
"io"
)
func main() {
pipeReader, pipeWriter := io.Pipe()
go func() {
pipeWriter.Write([]byte( "GfG" ))
pipeWriter.Write([]byte( "GeeksforGeeks" ))
pipeWriter.Write([]byte( "GfG is a CS-Portal." ))
}()
buffer := make([]byte, 50)
for i := 0; i < 2; i++ {
n, err := pipeReader.Read(buffer)
if err != nil {
panic(err)
}
pipeReader.Close()
fmt.Printf( "%s\n" , buffer[:n])
}
}
|
Output:
GfG
panic: io: read/write on closed pipe
goroutine 1 [running]:
main.main()
/tmp/sandbox180013044/prog.go:38 +0x302
Here, the content of only one Write operations is returned as its written before Close() method but the content written after the Close method is not returned and an ErrClosedPipe error is thrown instead.
Example 2:
package main
import (
"fmt"
"io"
)
func main() {
pipeReader, pipeWriter := io.Pipe()
go func() {
pipeWriter.Write([]byte( "GfG" ))
pipeWriter.Write([]byte( "GeeksforGeeks" ))
pipeWriter.Write([]byte( "GfG is a CS-Portal." ))
}()
buffer := make([]byte, 50)
pipeReader.Close()
for i := 0; i < 2; i++ {
n, err := pipeReader.Read(buffer)
if err != nil {
panic(err)
}
fmt.Printf( "%s\n" , buffer[:n])
}
}
|
Output:
panic: io: read/write on closed pipe
goroutine 1 [running]:
main.main()
/tmp/sandbox881512815/prog.go:41 +0x2ea
Here, nothing is read into the buffer as Close() method is called before any read operation so no content is read and only error is thrown here.
Share your thoughts in the comments
Please Login to comment...