Как узнать, кем был отменен контекст

«Как узнать, кем был отменен контекст» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go можно определить, кто отменил контекст (context.Context), используя метод context.Cause(). Этот метод возвращает причину отмены контекста, если она была задана через context.WithCancelCause(). Если контекст был отменен без указания причины (например, через context.WithCancel()), Cause() вернет context.Canceled.

Пример:

ctx, cancel := context.WithCancelCause(context.Background())
cancel(fmt.Errorf("пользовательская ошибка"))

if err := context.Cause(ctx); err != nil {
    fmt.Println("Причина отмены:", err) // Выведет: Причина отмены: пользовательская ошибка
}

Если контекст отменен по таймауту или дедлайну, Cause() вернет context.DeadlineExceeded.