Back to questions
Middle+
1
Что используют для того, чтобы из одной горутины завершить другую?
Companies where asked
ТБанк
Answer from AI
sobes.tech AI
В Go для того, чтобы из одной горутины завершить другую, обычно используют контексты (context.Context) или каналы.
1. Контекст (context.Context):
- Создаётся контекст с отменой (
context.WithCancel). - Передаётся в горутину.
- Когда нужно завершить горутину, вызывается функция отмены.
- Горутинa должна периодически проверять состояние контекста и корректно завершаться.
Пример:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Горутина завершена")
return
default:
// работа
}
}
}(ctx)
// В другой горутине или после события
cancel() // сигнал завершения
2. Каналы:
- Создаётся канал сигналов.
- Горутинa слушает канал и при получении сигнала завершает работу.
Пример:
done := make(chan struct{})
go func() {
for {
select {
case <-done:
fmt.Println("Горутина завершена")
return
default:
// работа
}
}
}()
// Чтобы завершить горутину
close(done)
Таким образом, для управления жизненным циклом горутин используют контексты или каналы, позволяющие безопасно и корректно завершать работу.