Назад к вопросам
Junior
17
Что такое контекст в Go? Для чего нужен, какие бывают виды, какие паттерны работы с ним существуют?
Компании, где спрашивали
Позитив Технолоджис
Ответ от нейросети
sobes.tech AI
В Go контекст (package context) — это механизм для передачи сигналов отмены, дедлайнов и других значений между горутинами.
Для чего нужен:
- Управление временем жизни операций (например, отмена HTTP-запроса при таймауте).
- Передача сквозных данных (например, идентификаторы запросов для логирования).
Виды контекста:
context.Background()— корневой, пустой контекст.context.TODO()— используется, когда контекст еще не определен.- Контексты с отменой (
WithCancel), с таймаутом (WithTimeout), с дедлайном (WithDeadline), с значениями (WithValue).
Паттерны работы:
- Передавать контекст первым параметром в функции.
- Не хранить контекст в структурах, а передавать явно.
- Проверять отмену через
<-ctx.Done().
Пример:
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
defer cancel()
select {
case <-time.After(time.Second * 10):
fmt.Println("operation finished")
case <-ctx.Done():
fmt.Println("operation cancelled or timed out")
}