Sobes.tech
Junior — Middle

È possibile eseguire un'operazione di lettura dal canale senza utilizzare un buffer?

sobes.tech AI

Risposta dell'AI

In Go, l'operazione di lettura da un canale (chan) senza utilizzo di buffer è possibile solo se il canale è a buffer. Se il canale non ha buffer (dimensione 0), l'operazione di lettura si blocca fino a quando non viene inviato un valore.

Pertanto:

  • Per una lettura non bloccante senza buffer, bisogna usare operazioni non bloccanti con il canale (ad esempio, tramite select con default), ma questo non garantisce la ricezione dei dati.
  • Se il canale non ha buffer, la lettura si blocca sempre fino a quando qualcuno non invia dati.

Esempio di canale con buffer:

ch := make(chan int, 1) // buffer di 1 elemento
ch <- 42                // invio del valore
val := <-ch             // lettura senza blocco

Se il canale non ha buffer, la lettura e la scrittura si sincronizzano direttamente tra goroutine.