Junior — Middle
In quali condizioni viene effettuato il blocco durante l'utilizzo del canale di trasmissione dati standard?
sobes.tech AI
Risposta dell'AI
In Go, il canale di trasmissione dati standarde si blocca nei seguenti casi:
- Quando si invia un valore al canale (
chan <- value), se il canale non ha buffer o se il buffer è pieno, la goroutine che invia si blocca fino a quando un altro thread non legge il valore. - Quando si legge dal canale (
value := <- chan), se il canale è vuoto, la goroutine che legge si blocca fino a quando non ci sono dati disponibili.
Pertanto, il blocco avviene quando si tenta di inviare dati a un canale pieno o di leggere da un canale vuoto, garantendo la sincronizzazione tra goroutine.
Esempio:
ch := make(chan int) // canale senza buffer
// L'invio si blocca finché qualcuno non legge
go func() {
ch <- 42
}()
val := <-ch // la lettura sblocca l'invio
fmt.Println(val)