Back to questions
Senior
4
Для чего нужен context в Go?
Companies where asked
Финтехробот
Answer from AI
sobes.tech AI
В Go пакет context используется для управления временем жизни запросов и операций, особенно в распределённых системах и при работе с горутинами. Он позволяет передавать сигналы отмены, дедлайны и значения между функциями и горутинами.
Основные задачи context:
- Отмена операций (например, при таймауте или отмене запроса пользователем).
- Передача дедлайнов (времени, к которому операция должна завершиться).
- Передача сквозных значений (например, идентификаторы запросов, токены аутентификации).
Пример использования:
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
// Отмена по таймауту через 5 секунд
go func(ctx context.Context) {
select {
case <-time.After(time.Second * 10):
fmt.Println("Операция завершена")
case <-ctx.Done():
fmt.Println("Операция отменена или таймаут")
}
}(ctx)
// В конце обязательно вызываем cancel для освобождения ресурсов
cancel()
Таким образом, context помогает контролировать жизненный цикл операций и координировать работу горутин.