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