Función io.PipeWriter.Write() en Golang con ejemplos

En el lenguaje Go, los paquetes io proporcionan interfaces fundamentales para las primitivas de E/S. Y su trabajo principal es encerrar las implementaciones en curso de tal rey de los primitivos. La función PipeWriter.Write() en el lenguaje Go se usa para implementar la interfaz estándar de Write. Escribe información en la tubería y la bloquea hasta que un lector o más de un lector haya tomado toda la información o se cierre el extremo de lectura de la tubería. Además, esta función se define en el paquete io. Aquí, debe importar el paquete «io» para usar estas funciones.

Sintaxis:

func (w *PipeWriter) Write(data []byte) (n int, err error)

Aquí, «w» es un puntero a PipeWriter. Donde PipeWriter es la mitad de escritura de la canalización y «datos» es un segmento de bytes donde se escriben los datos.

Valor devuelto: Devuelve el número de bytes escritos y un error si lo hubiera. Sin embargo, si el extremo de lectura de la canalización se cierra con un error, ese error se devuelve como err ; de lo contrario, el err devuelto es un error ErrClosedPipe.

Ejemplo 1:

// Golang program to illustrate the usage of
// io.pipeWriter.Write() function
  
// Including main package
package main
  
// Importing fmt and io
import (
    "fmt"
    "io"
)
  
// Calling main
func main() {
  
    // Calling Pipe method
    pipeReader, pipeWriter := io.Pipe()
  
    // Defining data parameter of Read method
    data := make([]byte, 20)
  
    // Reading data into the buffer stated
    go func() {
        pipeReader.Read(data)
  
        // Closing read half of the pipe
        pipeReader.Close()
    }()
  
    // Using for loop
    for i := 0; i < 1; i++ {
  
        // Calling pipeWriter.Write() method
        n, err := pipeWriter.Write([]byte("GfG!"))
  
        // If error is not nil panic
        if err != nil {
            panic(err)
        }
  
        // Prints the content written
        fmt.Printf("%v\n", string(data))
  
        // Prints the number of bytes
        fmt.Printf("%v\n", n)
    }
}

Producción:

GfG!
4

Aquí, no se devuelve ningún error ya que el extremo de lectura de la canalización no se cierra hasta que se ejecuta el bucle «for».

Ejemplo 2:

// Golang program to illustrate the usage of
// io.pipeWriter.Write() function
  
// Including main package
package main
  
// Importing fmt and io
import (
    "fmt"
    "io"
)
  
// Calling main
func main() {
  
    // Calling Pipe method
    pipeReader, pipeWriter := io.Pipe()
  
    // Defining data parameter of Read method
    data := make([]byte, 20)
  
    // Reading data into the buffer stated
    go func() {
        pipeReader.Read(data)
  
        // Closing read half of the pipe
        pipeReader.Close()
    }()
  
    // Using for loop
    for i := 0; i < 2; i++ {
  
        // Calling pipeWriter.Write() method
        n, err := pipeWriter.Write([]byte("GfG!"))
  
        // If error is not nil panic
        if err != nil {
            panic(err)
        }
  
        // Prints the content written
        fmt.Printf("%v\n", string(data))
  
        // Prints the number of bytes
        fmt.Printf("%v\n", n)
    }
}

Producción:

GfG!
4
panic: io: read/write on closed pipe

goroutine 1 [running]:
main.main()
    /tmp/sandbox367087659/prog.go:38 +0x3ad

Aquí, se devuelve un error ErrClosedPipe cuando el extremo de lectura de la canalización se cierra después de la primera iteración del bucle for.

Publicación traducida automáticamente

Artículo escrito por nidhi1352singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *