Как можно завершить горутину? Какие способы есть?

В Go горутины не имеют встроенного механизма принудительного завершения извне, поэтому завершение горутины обычно реализуется кооперативно. Основные способы:

Короткий ответ

Что ответить на собеседовании

В Go горутины не имеют встроенного механизма принудительного завершения извне, поэтому завершение горутины обычно реализуется кооперативно. Основные способы:

Подробный разбор

Ответ с пояснениями

В Go горутины не имеют встроенного механизма принудительного завершения извне, поэтому завершение горутины обычно реализуется кооперативно. Основные способы:

  1. Использование каналов для сигналов остановки — горутина слушает канал, и при получении сигнала завершает работу.
  2. Контекст (context.Context) — передача контекста с возможностью отмены, горутина периодически проверяет ctx.Done() и завершает работу при отмене.
  3. Флаги или переменные состояния — горутина проверяет значение переменной и завершает работу, если нужно.

Пример с контекстом:

ctx, cancel := context.WithCancel(context.Background())

go func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Горутина завершена")
            return
        default:
            // работа
        }
    }
}(ctx)

// В какой-то момент вызываем cancel(), чтобы остановить горутину
cancel()

Важно, что горутина должна сама корректно реагировать на сигнал завершения, иначе она продолжит работать.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее