Sobes.tech
Junior — Middle

Ce se întâmplă dacă încerci să citești date dintr-un canal care în prezent nu conține elemente?

sobes.tech AI

Răspuns de la AI

În Go, dacă încerci să citești dintr-un canal care în prezent nu conține elemente, comportamentul depinde de tipul canalului:

  • Canal tamponat: dacă tamponul este gol, citirea se blochează până când un element este scris în canal.
  • Canal fără tampon: citirea se blochează până când o altă gorutină trimite o valoare.

Prin urmare, citirea dintr-un canal gol duce la blocarea gorutinei curente până când apar date sau canalul este închis.

Exemplu:

ch := make(chan int)

// Citirea dintr-un canal gol va bloca execuția
val := <-ch // se blochează până când cineva trimite o valoare

// Pentru a evita blocarea, se poate folosi select cu default
select {
case val := <-ch:
    fmt.Println("Primite", val)
default:
    fmt.Println("Niciun dat în canal")
}