Sobes.tech
Junior — Middle

Este posibilă o operație de citire din canal fără utilizarea unui buffer?

sobes.tech AI

Răspuns de la AI

În Go, operația de citire dintr-un canal (chan) fără utilizarea unui buffer este posibilă doar dacă canalul are buffer. Dacă canalul nu are buffer (dimensiunea 0), operația de citire se blochează până când o valoare este trimisă în canal.

Prin urmare:

  • Pentru citirea non-blocantă fără buffer, trebuie utilizate operații non-blocante cu canalul (de exemplu, prin select cu default), dar acest lucru nu garantează primirea datelor.
  • Dacă canalul nu are buffer, citirea se blochează întotdeauna până când cineva trimite date.

Exemplu de canal cu buffer:

ch := make(chan int, 1) // buffer de 1 element
ch <- 42                // trimitem valoarea
val := <-ch             // citire fără blocare

Dacă canalul nu are buffer, citirea și scrierea se sincronizează direct între goroutines.