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
selectcudefault), 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.