Sobes.tech
Junior — Middle

Je možné provést operaci čtení z kanálu bez použití bufferu?

sobes.tech AI

Odpověď od AI

V jazyce Go je operace čtení z kanálu (chan) bez použití bufferu možná pouze tehdy, pokud je kanál bufferovaný. Pokud kanál nemá buffer (velikost 0), operace čtení se zablokuje, dokud nebude do kanálu odeslána hodnota.

Takže:

  • Pro neblokující čtení bez bufferu je třeba používat neblokující operace s kanálem (například přes select s default), ale to nezaručuje přijetí dat.
  • Pokud kanál není bufferovaný, čtení se vždy zablokuje, dokud někdo nepošle data.

Příklad bufferovaného kanálu:

ch := make(chan int, 1) // buffer na 1 prvek
ch <- 42                // odeslání hodnoty
val := <-ch             // čtení bez blokování

Pokud kanál není bufferovaný, synchronizují se přímo čtení a zápis mezi gorutinami.