Sobes.tech
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")
}