Sobes.tech
Junior — Middle

Koje ponašanje se očekuje ako pokušate da zatvorite kanal koji je već ranije zatvoren?

sobes.tech АИ

Одговор од АИ

В Go попытка закрыть уже закрытый канал приводит к панике (panic).

Закрывать канал можно только один раз, чтобы сигнализировать о том, что больше не будет отправлено значений.

Если вызвать close(ch) повторно для одного и того же канала, программа аварийно завершится с ошибкой.

Пример:

ch := make(chan int)
close(ch)       // корректно
close(ch)       // panic: close of closed channel

Поэтому важно контролировать, что канал закрывается только один раз.