Назад к вопросам
Junior — Middle
77
Каким образом реализовать безопасное завершение горутины, когда не получен ожидаемый результат, используя конструкцию switch-case?
Компании, где спрашивали
IDT
Ответ от нейросети
sobes.tech AI
Для безопасного завершения горутины при ожидании результата можно использовать конструкцию select с несколькими кейсами, включая таймаут или сигнал отмены. В Go нет прямого switch-case для каналов, но select выполняет похожую функцию.
Пример с таймаутом:
func worker(done chan struct{}) {
select {
case result := <-someChannel:
fmt.Println("Получен результат:", result)
case <-time.After(5 * time.Second):
fmt.Println("Таймаут ожидания результата, завершаем горутину")
return
case <-done:
fmt.Println("Получен сигнал завершения")
return
}
}
Здесь горутина ждет данные из someChannel. Если данные не пришли за 5 секунд, срабатывает таймаут, и горутина завершается. Также можно передать сигнал через канал done для принудительного завершения.
Такой подход позволяет избежать зависания горутины и контролировать её завершение безопасно.