0Pricing
Go Academy · Lección

La interfaz Reader

El núcleo de la E/S de Go

La interfaz Reader es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

El núcleo de la E/S en Go

io.Reader es una interfaz que unifica todas las entradas en Go: archivos, conexiones de red, cadenas, flujos comprimidos y mucho más.

El código que acepta un io.Reader funciona con cualquier fuente.

Definición de la interfaz

El contrato es mínimo:

  • Read(p []byte) (n int, err error)

Rellena p con hasta len(p) bytes, devuelve cuántos (n) y un error.

Leer de una cadena

strings.NewReader convierte una cadena en un io.Reader.

package main

import (
	"fmt"
	"strings"
)

func main() {
	r := strings.NewReader("Hello")
	buf := make([]byte, 5)
	n, _ := r.Read(buf)
	fmt.Printf("read %d bytes: %s\n", n, buf[:n])
}

Regla de n antes que err

Una llamada a Read puede devolver n > 0 bytes y un error al mismo tiempo. Procese siempre primero los n bytes y, después, compruebe el error.

Leer en un bucle

La mayoría de los lectores necesitan un bucle porque una sola llamada a Read puede devolver menos bytes de los solicitados.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := strings.NewReader("abcdef")
	buf := make([]byte, 2)
	for {
		n, err := r.Read(buf)
		if n > 0 {
			fmt.Printf("%s ", buf[:n])
		}
		if err == io.EOF {
			break
		}
	}
	fmt.Println()
}

io.ReadAll

Cuando los datos son pequeños y tienen un tamaño acotado, io.ReadAll lee todo en un slice de bytes por usted.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := strings.NewReader("read it all")
	data, _ := io.ReadAll(r)
	fmt.Println(string(data))
}

Lectores a partir de bytes

bytes.NewReader envuelve un slice de bytes, lo que resulta útil cuando ya tiene los datos en memoria.

package main

import (
	"bytes"
	"fmt"
	"io"
)

func main() {
	r := bytes.NewReader([]byte{72, 105})
	data, _ := io.ReadAll(r)
	fmt.Println(string(data))
}

Funciones que aceptan lectores

Escriba funciones que reciban io.Reader, no tipos concretos. Así, la misma función puede leer de un archivo, un socket o una cadena de prueba.

package main

import (
	"fmt"
	"io"
	"strings"
)

func countBytes(r io.Reader) int {
	data, _ := io.ReadAll(r)
	return len(data)
}

func main() {
	fmt.Println(countBytes(strings.NewReader("hello")))
}

io.EOF no es un error

Trate io.EOF como una señal normal que indica que el flujo ha terminado, no como un fallo. Solo los demás errores indican problemas reales.

LimitReader

io.LimitReader(r, n) envuelve un lector para que se detenga después de n bytes; resulta práctico para limitar la cantidad que lee.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := io.LimitReader(strings.NewReader("abcdefgh"), 3)
	data, _ := io.ReadAll(r)
	fmt.Println(string(data))
}

Por qué es mejor usar una sola interfaz

  • Desacopla el código de las fuentes de datos
  • Facilita las pruebas con cadenas o bytes
  • Se puede combinar con wrappers como LimitReader, gzip, etc.

Comprobación rápida

Compruebe sus conocimientos sobre io.Reader.

Recapitulación

Ha aprendido la interfaz de entrada fundamental.

  • Read(p []byte) (int, error) es todo el contrato
  • Repita el bucle hasta io.EOF; procese primero los n bytes
  • io.ReadAll, strings/bytes.NewReader, LimitReader
  • Acepte io.Reader en sus API

Preguntas frecuentes

¿La lección «La interfaz Reader» es gratis?

Sí — el texto completo de «La interfaz Reader» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «La interfaz Reader»?

El núcleo de la E/S de Go Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «La interfaz Reader»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. La interfaz Reader
  2. La interfaz Writer
  3. Funciones auxiliares de io
  4. Implementación de lectores personalizados
← Volver a Go Academy