0Pricing
Go Academy · Lezione

Writer con buffer

Scrivere in batch

Writer con buffer è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Perché usare scritture con buffer

Come per le letture, ogni piccola scrittura può attivare una chiamata di sistema. bufio.Writer accumula le scritture in memoria e le invia in blocchi grandi.

Importante: i dati nel buffer vanno persi se non chiama Flush().

Creare un bufio.Writer

Avvolga qualsiasi io.Writer. In questo caso avvolgiamo os.Stdout.

package main

import (
	"bufio"
	"os"
)

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

Non dimentichi Flush

Senza Flush(), l'output potrebbe non essere mai visualizzato. Un idioma comune è defer w.Flush().

package main

import (
	"bufio"
	"os"
)

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

Scrivere byte e stringhe

Utilizzi Write per le slice di byte, WriteString per le stringhe e WriteByte e WriteRune per i singoli valori.

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

Controllare lo stato del buffer

Buffered() indica quanti byte sono in attesa, mentre Available() indica quanto spazio libero rimane.

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

Svuotamento automatico a buffer pieno

Quando il buffer si riempie, bufio.Writer esegue automaticamente il flush. Deve comunque chiamare Flush() alla fine per i dati rimasti nel buffer parzialmente pieno.

Dimensione personalizzata del buffer

bufio.NewWriterSize(w, size) imposta la capacità. I buffer più grandi riducono la frequenza dei flush.

package main

import (
	"bufio"
	"os"
)

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

Scritture formattate con Fprintf

Poiché bufio.Writer è un io.Writer, può passarlo a fmt.Fprintf per ottenere un output formattato e con buffering.

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

Gestire gli errori di scrittura

Gli errori possono emergere durante una scrittura successiva o in Flush(). Controlli sempre l'errore restituito da 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)
	}
}

Raggruppare molte scritture

Il vero vantaggio è questo: un ciclo serrato di piccole scritture si trasforma in una o poche chiamate di sistema dopo il buffering.

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

Buone pratiche

  • Esegua sempre Flush() oppure lo richiami con defer
  • Controlli l'errore di Flush(), non solo quello di ogni scrittura
  • Scelga la dimensione del buffer in base al carico di lavoro

Verifica rapida

Verifichi la sua conoscenza dei writer con buffer.

Riepilogo

Ha imparato a raggruppare le scritture con bufio.Writer.

  • NewWriter e NewWriterSize
  • Write, WriteString, WriteByte e WriteRune
  • Funziona con fmt.Fprintf
  • Esegua sempre Flush() e ne controlli l'errore

Domande Frequenti

La lezione «Writer con buffer» è gratuita?

Sì — il testo completo di «Writer con buffer» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «Writer con buffer»?

Scrivere in batch Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Writer con buffer»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Reader con buffer
  2. Scanner
  3. Writer con buffer
  4. Streaming di file grandi
← Torna a Go Academy