Junior — Middle
Come si deve correttamente leggere i dati da un canale senza buffer?
sobes.tech AI
Risposta dell'AI
In Go, per leggere dati da un canale senza buffer, si dovrebbe usare una lettura non bloccante o una lettura con controllo della disponibilità dei dati. I canali di default possono essere con o senza buffer, ma per leggere senza buffer, di solito si usano canali senza buffer e l'operatore <-.
Esempio di lettura da un canale senza buffer:
ch := make(chan int) // canale senza buffer
// Invio in una goroutine separata
go func() {
ch <- 42
}()
// Lettura (attenderà che i dati siano disponibili)
value := <-ch
fmt.Println(value) // 42
Per evitare blocchi durante la lettura, si può usare la costruzione con select e default:
select {
case val := <-ch:
fmt.Println("Ricevuto", val)
default:
fmt.Println("Nessun dato")
}