Назад к вопросам
Senior
3
Как можно остановить выполнение горутины?
Компании, где спрашивали
Алабуга
Ответ от нейросети
sobes.tech AI
В Go нет встроенного способа принудительно остановить горутину извне, так как горутины не имеют метода kill или stop. Остановка горутины достигается кооперативно — сама горутина должна периодически проверять сигнал остановки и корректно завершаться.
Основные подходы:
- Использование канала для сигнала остановки:
stop := make(chan struct{})
go func() {
for {
select {
case <-stop:
fmt.Println("Горутина остановлена")
return
default:
// работа горутины
}
}
}()
// Чтобы остановить горутину:
close(stop)
- Использование контекста (context.Context):
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Горутина завершает работу")
return
default:
// работа
}
}
}(ctx)
// Для остановки:
cancel()
Таким образом, остановка горутины — это ответственность самой горутины, которая должна корректно реагировать на сигнал и завершаться.