Sobes.tech
Back to questions
Senior
6

Для чего используется context в Go?

Companies where asked
Магнит Тех

Answer from AI

sobes.tech AI

В Go пакет context используется для передачи сквозных сигналов отмены, дедлайнов и других значений между горутинами и функциями. Это позволяет контролировать жизненный цикл операций, особенно в сетевых запросах, обработке данных и параллельных вычислениях.

Основные применения context:

  • Отмена операций (например, при таймауте или отмене пользователем).
  • Передача дедлайна (времени, к которому операция должна завершиться).
  • Передача значений, связанных с запросом (например, ID пользователя, токены).

Пример использования:

ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
// Отмена по истечении 5 секунд

def fetchData(ctx context.Context) error {
    select {
    case <-time.After(time.Second * 10):
        // Долгая операция
        return nil
    case <-ctx.Done():
        // Отмена операции
        return ctx.Err()
    }
}

err := fetchData(ctx)
if err != nil {
    fmt.Println("Operation cancelled or timed out:", err)
}
cancel()

Таким образом, context помогает управлять временем жизни и отменой операций, улучшая контроль над конкурентностью и ресурсами.