0Pricing
Go Academy · Lektion

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 Sie defer)
  • 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 / NewWriterSize
  • Write, 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

  1. Gepufferte Reader
  2. Scanner
  3. Gepufferte Writer
  4. Große Dateien streamen
← Zurück zu Go Academy