Sobes.tech
Назад к вопросам
Junior — Middle
76

Возможна ли ситуация, когда выполнение горутины будет прервано или прекратится самостоятельно?

Ответ от нейросети

sobes.tech AI

В Go выполнение горутины может прекратиться самостоятельно в нескольких случаях:

  • Горутина завершила свою функцию. Как только функция, запущенная в горутине, отработала до конца, горутина завершается.
  • Паника внутри горутины. Если внутри горутины происходит паника и она не обработана, горутина завершится аварийно.
  • Отмена через контекст (context). Если горутина слушает сигнал отмены через context.Context и получает его, она может корректно завершиться.

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

Пример использования контекста для отмены горутины:

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

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

// В какой-то момент вызываем cancel()
cancel()

Таким образом, горутина завершается либо сама по окончании работы, либо по сигналу отмены, если это предусмотрено.