Go Academy · Lektion

Buffrade skrivare

Skriv i batcher

Lektion 3 av 413 steg

Buffrade skrivare är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Go Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Go Academy innehåller totalt 4 lektioner.

Varför buffrade skrivningar

Precis som vid läsningar kan varje liten skrivning utlösa ett systemanrop. bufio.Writer samlar skrivningar i minnet och tömmer dem i stora block.

Viktigt: Buffrade data går förlorade om ni inte anropar Flush().

Skapa en bufio.Writer

Omslut valfri io.Writer. Här omsluter vi os.Stdout.

package main

import (
	"bufio"
	"os"
)

func main() {
	w := bufio.NewWriter(os.Stdout)
	w.WriteString("Hello buffered\n")
	w.Flush()
}

Glöm inte Flush

Utan Flush() kanske utdata aldrig visas. Ett vanligt idiom är defer w.Flush().

package main

import (
	"bufio"
	"os"
)

func main() {
	w := bufio.NewWriter(os.Stdout)
	defer w.Flush()
	w.WriteString("written via defer\n")
}

Skriva byte och strängar

Använd Write för byteslicer, WriteString för strängar samt WriteByte och WriteRune för enskilda värden.

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()
}

Kontrollera buffertens tillstånd

Buffered() anger hur många byte som väntar, och Available() hur mycket ledigt utrymme som återstår.

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()
}

Automatisk tömning när bufferten är full

När bufferten blir full tömmer bufio.Writer den automatiskt. Ni måste fortfarande anropa Flush() i slutet för de återstående byte som inte fyller bufferten.

Anpassad buffertstorlek

bufio.NewWriterSize(w, size) anger kapaciteten. Större buffertar minskar hur ofta bufferten töms.

package main

import (
	"bufio"
	"os"
)

func main() {
	w := bufio.NewWriterSize(os.Stdout, 8192)
	w.WriteString("custom size buffer\n")
	w.Flush()
}

Formaterade skrivningar med Fprintf

Eftersom bufio.Writer är en io.Writer kan ni skicka den till fmt.Fprintf för formaterad, buffrad utdata.

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()
}

Hantera skrivfel

Fel kan uppstå vid en senare skrivning eller vid Flush(). Kontrollera alltid felet som returneras av 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)
	}
}

Samla många skrivningar

Den stora vinsten är att en tät loop med små skrivningar efter buffring blir ett (eller några få) systemanrop.

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')
}

Bästa praxis

  • Anropa alltid Flush() (eller använd defer)
  • Kontrollera felet från Flush(), inte bara från varje skrivning
  • Anpassa buffertens storlek efter arbetsbelastningen

Snabb kontroll

Testa era kunskaper om buffrade skrivare.

Sammanfattning

Ni har lärt er att samla skrivningar med bufio.Writer.

  • NewWriter / NewWriterSize
  • Write, WriteString, WriteByte, WriteRune
  • Fungerar med fmt.Fprintf
  • Anropa alltid Flush() och kontrollera felet
Gratis att börja

Lär dig Go med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Buffrade skrivare” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”Buffrade skrivare”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Go Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Buffrade skrivare”?

Skriv i batcher Ni övar på Go Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Go Academy?

Du behöver inga förkunskaper. Utbildningen i Go Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Buffrade skrivare”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Go Academy-lektionen?

Ja. Varje Go Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Buffrade läsare
  2. Skannrar
  3. Buffrade skrivare
  4. Strömma stora filer
← Tillbaka till Go Academy