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.Readeren 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
- La interfaz Reader
- La interfaz Writer
- Funciones auxiliares de io
- Implementación de lectores personalizados