Junior — Middle
Co se stane, když se pokusíte přečíst data z kanálu, který momentálně neobsahuje žádné prvky?
sobes.tech AI
Odpověď od AI
V jazyce Go, pokud se pokusíte číst z kanálu, který momentálně neobsahuje žádné prvky, chování závisí na typu kanálu:
- Bufferovaný kanál: pokud je buffer prázdný, čtení se zablokuje, dokud do kanálu nebude zapsán prvek.
- Nebufferovaný kanál: čtení se zablokuje, dokud jiná gorutina nepošle hodnotu.
Tím pádem, čtení z prázdného kanálu způsobí zablokování aktuální gorutiny, dokud se neobjeví data nebo se kanál nezavře.
Příklad:
ch := make(chan int)
// Čtení z prázdného kanálu zablokuje provádění
val := <-ch // zablokuje se, dokud někdo nepošle hodnotu
// Abychom se vyhnuli zablokování, můžeme použít select s default
select {
case val := <-ch:
fmt.Println("Přijato", val)
default:
fmt.Println("Žádná data v kanálu")
}