Sobes.tech
Junior — Middle

Come avviene la trasmissione dei dati attraverso un canale non bufferizzato?

sobes.tech AI

Risposta dell'AI

In Go, un canale non bufferizzato (canale senza buffer) garantisce una trasmissione sincrona dei dati tra goroutine. Ciò significa che l’invio di un valore nel canale si blocca finché un’altra goroutine non riceve quel valore dal canale, e viceversa: la ricezione si blocca finché non c’è un valore da leggere.

In questo modo, la trasmissione di dati attraverso un canale non bufferizzato avviene con la sincronizzazione tra mittente e destinatario, garantendo uno scambio di dati senza memorizzazione intermedia.

Esempio:

ch := make(chan int) // canale non bufferizzato

go func() {
    ch <- 42 // l’invio si blocca finché qualcuno non legge
}()

value := <-ch // la ricezione blocca l’esecuzione finché non compare un valore
fmt.Println(value) // stamperà 42

In questo esempio, la goroutine invia un numero nel canale e si blocca finché la goroutine principale non legge quel numero.