Función io.SectionReader.ReadAt() 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 SectionReader.ReadAt() en el lenguaje Go se usa para devolver el número de bytes leídos por el método NewSectionReader . Este método contiene un búfer y compensaciones como sus parámetros. Además, esta función se define en el paquete io. Aquí, debe importar el paquete «io» para usar estas funciones.

Sintaxis:

func (s *SectionReader) ReadAt(p []byte, off int64) (n int, err error)

Aquí, «s» es un puntero a SectionReader que devuelve el método NewSectionReader , «p» es un búfer de la longitud de bytes indicada y «off» es el desplazamiento de tipo int64 desde donde comienza la lectura.

Valor devuelto: Devuelve el número de bytes del contenido devuelto desde el búfer indicado de la longitud especificada, así como el desplazamiento y también devuelve un error, si lo hay, pero si no se produjo ningún error, se devuelve «nil».

Los siguientes ejemplos ilustran el uso del método anterior:

Ejemplo 1:

// Golang program to illustrate the usage of
// io.SectionReader.ReadAt() function
  
// Including main package
package main
  
// Importing fmt, io, and strings
import (
    "fmt"
    "io"
    "strings"
)
  
// Calling main
func main() {
  
    // Defining reader using NewReader method
    reader := strings.NewReader("GeeksforGeeks\n")
  
    // Calling NewSectionReader method with its parameters
    r := io.NewSectionReader(reader, 6, 12)
  
    // Defining buffer using make keyword
    buf := make([]byte, 4)
  
    // Calling ReadAt method with its parameters
    n, err := r.ReadAt(buf, 2)
  
    // If error is not nil then panics
    if err != nil {
        panic(err)
    }
  
    // Prints output
    fmt.Printf("Content in buffer: %s\n", buf)
    fmt.Printf("n: %v\n", n)
}

Producción:

Content in buffer: Geek
n: 4

En el ejemplo anterior, primero, el contenido se devuelve desde NewSectionReader() y luego ese contenido se lee desde el desplazamiento dado en el método ReadAt() hasta el número de bytes indicado en el búfer. Luego, el número de bytes del contenido resultante se devuelve como salida aquí. Además, el contenido del búfer anterior tiene solo 4 bytes, por lo que se devuelve «4» y no se produce ningún error al leer el contenido indicado, por lo que el error es «nulo».

Ejemplo 2:

// Golang program to illustrate the usage of
// io.SectionReader.ReadAt() function
  
// Including main package
package main
  
// Importing fmt, io, and strings
import (
    "fmt"
    "io"
    "strings"
)
  
// Calling main
func main() {
  
    // Defining reader using NewReader method
    reader := strings.NewReader("Computer Science!")
  
    // Calling NewSectionReader method with its parameters
    r := io.NewSectionReader(reader, 6, 12)
  
    // Defining buffer using make keyword
    buf := make([]byte, 10)
  
    // Calling ReadAt method with its parameters
    n, err := r.ReadAt(buf, 2)
  
    // If error is not nil then panics
    if err != nil {
        panic(err)
    }
  
    // Prints output
    fmt.Printf("Content in buffer: %s\n", buf)
    fmt.Printf("n: %v\n", n)
}

Producción:

panic: EOF

goroutine 1 [running]:
main.main()
    /tmp/sandbox798260752/prog.go:31 +0x263

Aquí, el contenido en el búfer utilizado en el código anterior tiene menos bytes que los indicados, por lo que se genera un error EOF.

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 *