Escritores con búfer
Agrupe escrituras
Escritores con búfer es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 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.
Por qué usar búferes al escribir
Al igual que ocurre con las lecturas, cada escritura pequeña puede activar una llamada al sistema. bufio.Writer recopila las escrituras en memoria y las vacía en bloques grandes.
Importante: los datos almacenados en el búfer se pierden si no llama a Flush().
Crear un bufio.Writer
Envuelva cualquier io.Writer. Aquí envolvemos os.Stdout.
package main
import (
"bufio"
"os"
)
func main() {
w := bufio.NewWriter(os.Stdout)
w.WriteString("Hello buffered\n")
w.Flush()
}No olvide Flush
Sin Flush(), es posible que la salida nunca aparezca. Un patrón habitual es defer w.Flush().
package main
import (
"bufio"
"os"
)
func main() {
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
w.WriteString("written via defer\n")
}Escribir bytes y cadenas
Use Write para slices de bytes, WriteString para cadenas, y WriteByte y WriteRune para valores individuales.
package main
import (
"bufio"
"os"
)
func main() {
w := bufio.NewWriter(os.Stdout)
w.Write([]byte("bytes "))
w.WriteString("string ")
w.WriteRune('!')
w.WriteByte('\n')
w.Flush()
}Comprobar el estado del búfer
Buffered() indica cuántos bytes están esperando, y Available() cuánto espacio libre queda.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
w := bufio.NewWriter(os.Stdout)
w.WriteString("abc")
fmt.Fprintf(os.Stderr, "buffered: %d\n", w.Buffered())
w.Flush()
}Vaciado automático al llenarse
Cuando el búfer se llena, bufio.Writer lo vacía automáticamente. Aun así, debe llamar a Flush() al final para vaciar los datos restantes del búfer parcial.
Tamaño de búfer personalizado
bufio.NewWriterSize(w, size) establece la capacidad. Los búferes más grandes reducen la frecuencia de vaciado.
package main
import (
"bufio"
"os"
)
func main() {
w := bufio.NewWriterSize(os.Stdout, 8192)
w.WriteString("custom size buffer\n")
w.Flush()
}Escrituras con formato mediante Fprintf
Como bufio.Writer es un io.Writer, puede pasarlo a fmt.Fprintf para generar una salida con formato y almacenada en búfer.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
w := bufio.NewWriter(os.Stdout)
for i := 1; i <= 3; i++ {
fmt.Fprintf(w, "line %d\n", i)
}
w.Flush()
}Gestionar errores de escritura
Los errores pueden aparecer en una escritura posterior o en Flush(). Compruebe siempre el error devuelto por Flush().
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
w := bufio.NewWriter(os.Stdout)
w.WriteString("data\n")
if err := w.Flush(); err != nil {
fmt.Fprintln(os.Stderr, "flush failed:", err)
}
}Agrupar muchas escrituras
La verdadera ventaja es que un bucle compacto de escrituras pequeñas se convierte en una o varias llamadas al sistema después de almacenarlas en un búfer.
package main
import (
"bufio"
"os"
)
func main() {
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
for i := 0; i < 5; i++ {
w.WriteString("x")
}
w.WriteByte('\n')
}Prácticas recomendadas
- Llame siempre a
Flush()(o usedefer) - Compruebe el error de
Flush(), no solo el de cada escritura - Adapte el tamaño del búfer a su carga de trabajo
Comprobación rápida
Compruebe sus conocimientos sobre los escritores con búfer.
Recapitulación
Ha aprendido a agrupar escrituras con bufio.Writer.
NewWriter/NewWriterSizeWrite,WriteString,WriteByte,WriteRune- Funciona con
fmt.Fprintf - Llame siempre a
Flush()y compruebe su error
Preguntas frecuentes
¿La lección «Escritores con búfer» es gratis?
Sí — el texto completo de «Escritores con búfer» 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 «Escritores con búfer»?
Agrupe escrituras 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 3 de 4.
¿Cuánto tiempo toma la lección «Escritores con búfer»?
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
- Lectores con búfer
- Scanners
- Escritores con búfer
- Transmisión de archivos grandes