> Как программа узнает об окончании списка URL и передает сигнал завершения (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Ozon

Стек: Go

> Пример ответа

В Go программа может узнавать об окончании списка URL и передавать сигнал завершения несколькими способами. Самый распространённый - использование каналов и паттерна конвейера (pipeline). Например, вы создаёте канал urls, в который горутина-производитель отправляет URL из списка. Когда список заканчивается, производитель закрывает канал с помощью close(urls). Потребитель (воркер) читает из канала в цикле for url := range urls - этот цикл автоматически завершится, когда канал будет закрыт и все данные прочитаны. Затем воркер может отправить сигнал в канал done (например, done <- struct{}{}) или использовать sync.WaitGroup для синхронизации. Другой вариант - контекст с отменой (context.Context): при завершении списка вызывается cancel(), и все горутины, слушающие контекст через select, получают сигнал. Для простых случаев можно использовать счётчик с sync.WaitGroup: после обработки каждого URL вызывается wg.Done(), а основной поток ждёт wg.Wait(). Выбор зависит от архитектуры: каналы и контекст дают более гибкое управление, особенно при параллельной обработке.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью