Back to questions
YadroОсновные возможности
Middle
6
Что такое контекст (context) в Go? Как используется? Как работает отмена через контекст?
Companies where asked
Answer from AI
sobes.tech AI
В Go context — это пакет, который используется для передачи сигналов отмены, дедлайнов и других значений между горутинами, особенно при работе с запросами и внешними операциями.
Основные возможности context:
- Отмена: позволяет отменить операцию, если она больше не нужна или превысила время ожидания.
- Дедлайн: задаёт время, после которого операция автоматически отменяется.
- Передача значений: можно передавать данные, например, идентификаторы запросов.
Как используется:
Создаётся базовый контекст, обычно context.Background() или context.TODO(). Затем создаются производные контексты с таймаутом, дедлайном или возможностью отмены.
Пример с отменой:
import (
"context"
"fmt"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
go func() {
time.Sleep(2 * time.Second)
cancel() // Отмена контекста через 2 секунды
}()
select {
case <-time.After(5 * time.Second):
fmt.Println("Операция завершена")
case <-ctx.Done():
fmt.Println("Операция отменена:", ctx.Err())
}
}
Как работает отмена через контекст:
- При вызове функции
cancel()или при достижении дедлайна, каналctx.Done()закрывается. - Все горутины, которые слушают этот канал, получают сигнал об отмене и могут корректно завершить работу.
Таким образом, context помогает управлять временем жизни операций и координировать отмену между горутинами.