Back to questions
Senior
1
Как можно завершить горутину? Какие способы есть?
Companies where asked
СБК ПАРУС
Answer from AI
sobes.tech AI
В Go горутины не имеют встроенного механизма принудительного завершения извне, поэтому завершение горутины обычно реализуется кооперативно. Основные способы:
-
Использование каналов для сигналов остановки — горутина слушает канал, и при получении сигнала завершает работу.
-
Контекст (context.Context) — передача контекста с возможностью отмены, горутина периодически проверяет ctx.Done() и завершает работу при отмене.
-
Флаги или переменные состояния — горутина проверяет значение переменной и завершает работу, если нужно.
Пример с контекстом:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Горутина завершена")
return
default:
// работа
}
}
}(ctx)
// В какой-то момент вызываем cancel(), чтобы остановить горутину
cancel()
Важно, что горутина должна сама корректно реагировать на сигнал завершения, иначе она продолжит работать.