Что такое контекст?

Junior
1k просмотров
AFK Offer AI

context.Context — механизм для передачи дедлайнов, отмены и метаданных через цепочку вызовов.

// С таймаутом
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()

// С отменой ctx, cancel := context.WithCancel(ctx)

// С данными ctx = context.WithValue(ctx, "userID", 42)

Правила:

  • Контекст — первый параметр функции: func DoWork(ctx context.Context, ...)
  • Не храни контекст в структурах
  • Всегда вызывай cancel (defer cancel())
  • context.Background() — корневой контекст
  • context.TODO() — заглушка, когда непонятно какой контекст использовать
Контекст формирует дерево: отмена родителя отменяет все дочерние.

Следующий вопрос

Как работает net/http клиент?