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ů.