Загрузка…
Загрузка…
Go · junior · сложность 4
Основное правило Go: канал закрывается тем, владельцем стороны записи, и только после того, как все операции send гарантированно завершатся. Сценарий с несколькими горутинами записи требует координации завершения.
Запустите несколько подпрограмм записи.
Каждый писатель сигнализирует об этом после завершения работы (WaitGroup.Done()).
Отдельная горутина управления ожидает wg.Wait().
Только после этого вызывает close(ch).
Ни одна горутина не пишет в канал после close.
Избегает паники send on closed channel.
Закрытие происходит ровно один раз для каждой контролируемой точки.
Разрешить каждому автору самостоятельно закрывать общий канал.
Закрыть канал "на всякий случай" из нескольких мест.
Поймать панику как «механизм синхронизации» — это антипаттерн.
Для ранней остановки используйте отдельный done/context, а не close(dataCh).
на стороне читателя.
Если вам нужно гарантировать единовременное закрытие в сложной топологии, используйте ⟦С0⟧.
В сценарии с несколькими авторами канал безопасно закрывается координатором после явного подтверждения завершения всех подпрограмм записи. Принцип прост: много отправителей, один ближе, все-таки отправляет близко.
Основное правило Go: канал закрывается тем, владельцем стороны записи, и только после того, как все операции send гарантированно завершатся.