Gepufferte Writer
Schreibvorgänge bündeln
Gepufferte Writer ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum gepufferte Schreibvorgänge
Wie beim Lesen kann jeder kleine Schreibvorgang einen Systemaufruf auslösen. bufio.Writer sammelt Schreibvorgänge im Speicher und schreibt sie in großen Blöcken.
Wichtig: Gepufferte Daten gehen verloren, wenn Sie nicht Flush() aufrufen.
Einen bufio.Writer erstellen
Umschließen Sie jeden io.Writer. Hier umschließen wir os.Stdout.
package main
import (
"bufio"
"os"
)
func main() {
w := bufio.NewWriter(os.Stdout)
w.WriteString("Hello buffered\n")
w.Flush()
}Flush nicht vergessen
Ohne Flush() wird Ihre Ausgabe möglicherweise nie angezeigt. Ein häufig verwendetes Muster ist defer w.Flush().
package main
import (
"bufio"
"os"
)
func main() {
w := bufio.NewWriter(os.Stdout)
defer w.Flush()
w.WriteString("written via defer\n")
}Bytes und Strings schreiben
Verwenden Sie Write für Byte-Slices, WriteString für Strings sowie WriteByte und WriteRune für einzelne Werte.
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()
}Pufferstatus prüfen
Buffered() gibt an, wie viele Bytes noch ausstehen, und Available(), wie viel freier Speicherplatz verbleibt.
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()
}Automatisches Flush bei vollem Puffer
Wenn der Puffer voll ist, leert bufio.Writer ihn automatisch. Am Ende müssen Sie trotzdem Flush() aufrufen, damit auch die verbleibenden Daten des teilweise gefüllten Puffers geschrieben werden.
Benutzerdefinierte Puffergröße
bufio.NewWriterSize(w, size) legt die Kapazität fest. Größere Puffer verringern die Häufigkeit von Flush-Vorgängen.
package main
import (
"bufio"
"os"
)
func main() {
w := bufio.NewWriterSize(os.Stdout, 8192)
w.WriteString("custom size buffer\n")
w.Flush()
}Formatierte Schreibvorgänge mit Fprintf
Da bufio.Writer ein io.Writer ist, können Sie ihn für formatierte, gepufferte Ausgaben an fmt.Fprintf übergeben.
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()
}Schreibfehler behandeln
Fehler können erst bei einem späteren Schreibvorgang oder bei Flush() auftreten. Prüfen Sie immer den von Flush() zurückgegebenen Fehler.
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)
}
}Viele Schreibvorgänge bündeln
Der entscheidende Vorteil: Aus einer engen Schleife mit kleinen Schreibvorgängen werden nach dem Puffern nur ein oder wenige Systemaufrufe.
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')
}Bewährte Vorgehensweisen
- Rufen Sie immer
Flush()auf (oder verwenden Siedefer) - Prüfen Sie den Fehler von
Flush(), nicht nur den Fehler jedes einzelnen Schreibvorgangs - Wählen Sie die Puffergröße passend zu Ihrer Arbeitslast
Kurze Überprüfung
Testen Sie Ihr Wissen über gepufferte Writer.
Zusammenfassung
Sie haben gelernt, Schreibvorgänge mit bufio.Writer zu bündeln.
NewWriter/NewWriterSizeWrite,WriteString,WriteByte,WriteRune- Funktioniert mit
fmt.Fprintf - Immer
Flush()aufrufen und den Fehler prüfen
Häufig gestellte Fragen
Ist die Lektion „Gepufferte Writer“ kostenlos?
Ja — der vollständige Text von „Gepufferte Writer“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Gepufferte Writer“?
Schreibvorgänge bündeln Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Gepufferte Writer“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Gepufferte Reader
- Scanner
- Gepufferte Writer
- Große Dateien streamen