> Как остановить обработку после получения первых двух успешных запросов в Go (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Ozon
Стек: Go
> Пример ответа
Для остановки обработки после получения первых двух успешных запросов в Go можно использовать контекст с отменой (context.WithCancel) и синхронизацию через каналы. Вот пример:
GOpackage mainimport ("context""fmt""sync")func main() {ctx, cancel := context.WithCancel(context.Background())defer cancel()results := make(chan int, 2) // буферизированный канал для результатовvar wg sync.WaitGroup// Запускаем несколько горутинfor i := 1; i <= 5; i++ {wg.Add(1)go func(id int) {defer wg.Done()select {case <-ctx.Done():return // остановка, если контекст отменёнdefault:// Имитация успешного запросаfmt.Printf("Горутина %d: запрос выполнен\n", id)results <- id}}(i)}// Ждём два успешных результатаsuccessCount := 0for result := range results {fmt.Printf("Получен результат от горутины %d\n", result)successCount++if successCount >= 2 {cancel() // отменяем контекст, остальные горутины завершатсяbreak}}wg.Wait() // дожидаемся завершения всех горутинclose(results)fmt.Println("Обработка завершена")}
Пояснение:
context.WithCancelсоздаёт контекст, который можно отменить.- Каждая горутина проверяет
ctx.Done()перед выполнением - если контекст отменён, она завершается. - После получения двух успешных результатов вызывается
cancel(), что сигнализирует остальным горутинам остановиться. sync.WaitGroupгарантирует, что главная горутина дождётся завершения всех запущенных процессов.
Этот подход эффективен и безопасен для конкурентной обработки в Go.
> Похожие задачи по Go
Как понять, что код отработал правильно
Как в Go встраивание заменяет наследование
Как реализовать worker pool для ограничения количества горутин в Go
Как программа узнает об окончании списка URL и передает сигнал завершения
> Похожие задачи по backend
Как понять, что код отработал правильно
Как в Go встраивание заменяет наследование
Как реализовать worker pool для ограничения количества горутин в Go
Как программа узнает об окончании списка URL и передает сигнал завершения
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью