Назад к вопросам
Senior
3
Как реализуется отмена контекста? Что внутри происходит?
Компании, где спрашивали
Финтехробот
Ответ от нейросети
sobes.tech AI
В Go контекст (context.Context) используется для управления временем жизни операций, передачи сигналов отмены и дедлайнов.
Отмена контекста реализуется через создание дочернего контекста с функцией отмены, которая при вызове сигнализирует всем слушателям о необходимости прекратить работу.
Внутри происходит следующее:
- Создаётся канал, который закрывается при отмене контекста.
- Все функции, получившие этот контекст, могут слушать этот канал и реагировать на его закрытие (например, прерывать операции).
- Отмена может быть вызвана вручную (через вызов функции cancel) или автоматически при достижении дедлайна.
Пример:
ctx, cancel := context.WithCancel(context.Background())
// Запускаем горутину, которая слушает отмену
go func() {
<-ctx.Done() // ждем сигнал отмены
fmt.Println("Context cancelled")
}()
// В какой-то момент вызываем отмену
cancel()
Таким образом, отмена контекста — это механизм координации между горутинами через канал, сигнализирующий о необходимости завершения работы.