Sobes.tech
Назад к вопросам
Senior
3

Что такое context в Go и зачем он нужен?

Компании, где спрашивали
SelectelSelectel

Ответ от нейросети

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 помогает управлять временем жизни операций и координировать их отмену, что особенно важно в сетевых и конкурентных приложениях.