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
selectcondefault), 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.