> Почему для закрытия канала и ожидания работы горутин используется отдельная горутина, а не main функция? (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Aston
Стек: Go
> Пример ответа
В Go main-функция выполняется в главной горутине. Если мы закроем канал или будем ожидать завершения горутин прямо в main, то при блокирующих операциях (например, wg.Wait() или закрытие канала после отправки) программа может зависнуть или завершиться раньше времени. Использование отдельной горутины для этих целей позволяет:
- Избежать deadlock'а - main-горутина не блокируется на ожидании, а может сразу перейти к завершению программы после получения сигнала.
- Обеспечить корректный порядок завершения - отдельная горутина закрывает канал только когда все воркеры действительно закончили работу (например, после
wg.Wait()), а main-горутина в это время может обрабатывать последние данные из канала. - Разделить ответственность - main отвечает за запуск и координацию, а отдельная горутина - за синхронизацию завершения.
Пример:
GOfunc main() {ch := make(chan int)var wg sync.WaitGroupfor i := 0; i < 5; i++ {wg.Add(1)go func() {defer wg.Done()ch <- 42}()}go func() {wg.Wait()close(ch) // закрываем канал только после всех воркеров}()for val := range ch {fmt.Println(val)}}
Без отдельной горутины пришлось бы вызывать wg.Wait() до закрытия канала, что заблокировало бы main и не позволило бы читать из канала конкурентно.
> Похожие задачи по Go
Можно ли примерно оценить, когда запустится горутина после ее запуска?
Что такое GPM модель планировщика в Go и как она работает?
Как оптимизировать память при слиянии массивов?
Как прервать выполнение goroutine без остановки главной программы в Go
> Похожие задачи по backend
Можно ли примерно оценить, когда запустится горутина после ее запуска?
Что такое GPM модель планировщика в Go и как она работает?
Как оптимизировать память при слиянии массивов?
Как прервать выполнение goroutine без остановки главной программы в Go
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью