Sobes.tech
Junior — Middle

Cum se realizează transmiterea datelor printr-un canal ne-bufferizat?

sobes.tech AI

Răspuns de la AI

În Go, un canal fără buffer (canal nebufferizat) asigură transferul sincron de date între goroutines. Aceasta înseamnă că trimiterea unei valori în canal se blochează până când o altă goroutine primește acea valoare din canal, și invers — recepția se blochează până când există o valoare de citit.

Astfel, transferul de date printr-un canal nebufferizat are loc cu sincronizarea expeditorului și receptorului, garantând schimbul de date fără stocare intermediară.

Exemplu:

ch := make(chan int) // canal nebufferizat

go func() {
    ch <- 42 // trimiterea se blochează până când cineva citește
}()

value := <-ch // recepția blochează execuția până apare o valoare
fmt.Println(value) // va afișa 42

În acest exemplu, goroutine trimite un număr în canal și se blochează până când goroutine principală citește acel număr.