Назад к вопросам
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()
Таким образом, горутина завершается либо сама по окончании работы, либо по сигналу отмены, если это предусмотрено.