Junior — Middle
Čo sa stane, ak sa pokúsite prečítať údaje z kanála, ktorý momentálne neobsahuje žiadne prvky?
sobes.tech AI
Odpoveď od AI
V jazyku Go, ak sa pokúsite čítať z kanála, ktorý momentálne neobsahuje žiadne prvky, správanie závisí od typu kanála:
- Bufferovaný kanál: ak je buffer prázdny, čítanie sa zablokuje, kým do kanála nebude zapísaný prvok.
- Nebufferovaný kanál: čítanie sa zablokuje, kým iná gorutina nepošle hodnotu.
Týmto spôsobom, čítanie z prázdneho kanála spôsobí zablokovanie aktuálnej gorutiny, kým sa neobjavia dáta alebo sa kanál zatvorí.
Príklad:
ch := make(chan int)
// Čítanie z prázdneho kanála zablokuje vykonávanie
val := <-ch // zablokuje sa, kým niekto nepošle hodnotu
// Aby ste sa vyhli zablokovaniu, môžete použiť select s default
select {
case val := <-ch:
fmt.Println("Prijaté", val)
default:
fmt.Println("Žiadne dáta v kanáli")
}