Back to questions
Selectel
Senior
4
Что такое context в Go и зачем он нужен?
Companies where asked
Answer from AI
sobes.tech AI
В Go context — это пакет и тип, который используется для передачи информации о дедлайнах, отмене операций и других значимых данных между горутинами.
Основные задачи context:
- Отмена операций: Позволяет отменить выполнение горутины или цепочки вызовов, например, при таймауте или отмене запроса.
- Передача дедлайнов: Можно задать время, после которого операция должна быть прервана.
- Передача значений: Контекст может нести ключ-значение для передачи данных между функциями (например, идентификатор запроса).
Пример использования:
func fetchData(ctx context.Context) error {
req, _ := http.NewRequest("GET", "http://example.com", nil)
req = req.WithContext(ctx) // связываем запрос с контекстом
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
// обработка ответа
return nil
}
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
err := fetchData(ctx)
if err != nil {
fmt.Println("Ошибка или отмена:", err)
}
}
Таким образом, context помогает управлять временем жизни операций и координировать их отмену, что особенно важно в сетевых и конкурентных приложениях.