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