Sobes.tech
Junior — Middle

Je povoleno posílat data do kanálu, který není otevřen pro čtení a zápis?

sobes.tech AI

Odpověď od AI

V jazyce Go nelze odesílat data do kanálu, který není otevřen pro zápis. Pokud je kanál uzavřen (uzavření pomocí close(channel)), pokus o jeho odeslání způsobí paniku (runtime panic).

Nicméně, čtení z uzavřeného kanálu je možné — při tom čtení vrátí nulovou hodnotu typu kanálu a příznak, který ukazuje, že kanál je uzavřen.

Příklad:

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

// Čtení z uzavřeného kanálu je bezpečné
value, ok := <-ch // ok == false

// Odeslání do uzavřeného kanálu způsobí paniku
ch <- 1 // panic: send on closed channel

Tedy, data lze odesílat pouze do otevřených kanálů.