Buffrade skrivare
Skriv i batcher
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änddefer) - 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/NewWriterSizeWrite,WriteString,WriteByte,WriteRune- Fungerar med
fmt.Fprintf - Anropa alltid
Flush()och kontrollera felet
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
- Buffrade läsare
- Skannrar
- Buffrade skrivare
- Strömma stora filer