Sobes.tech
Назад к вопросам
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 для принудительного завершения.

Такой подход позволяет избежать зависания горутины и контролировать её завершение безопасно.