Что будет если закрыть уже закрытый канал?

Middle
1.1k просмотров
AFK Offer AI

Будет panic: close of closed channel. Go не позволяет закрывать канал дважды, и это нельзя проверить без рейса.

ch := make(chan int)
close(ch)
close(ch) // panic: close of closed channel

Чтобы избежать этого, следуй правилу: закрывает канал только отправитель, и только один раз. Если несколько горутин пишут в канал — используй sync.Once для безопасного закрытия или вообще не закрывай канал (GC соберёт его, когда на него не останется ссылок).

Следующий вопрос

Как работает sync.Once?