Sobes.tech
Junior — Middle

Je povolené odosielať údaje do kanála, ktorý nie je otvorený na čítanie a zápis?

sobes.tech AI

Odpoveď od AI

V jazyku Go nie je možné odosielať údaje do kanála, ktorý nie je otvorený pre zápis. Ak je kanál zatvorený (zatvorenie pomocou close(channel)), pokus o jeho odoslanie spôsobí pániku (runtime panic).

Avšak, čítanie zo zatvoreného kanála je možné — pri tom čítanie vráti nulovú hodnotu typu kanála a vlajku, ktorá ukazuje, že kanál je zatvorený.

Príklad:

ch := make(chan int)
close(ch)

// Čítanie zo zatvoreného kanála je bezpečné
value, ok := <-ch // ok == false

// Odoslanie do zatvoreného kanála spôsobí pániku
ch <- 1 // panic: send on closed channel

Teda, údaje je možné odosielať iba do otvorených kanálov.