Err, Background, TODO
В логах инцидента смешались два сценария: «клиент ушёл» и «мы не успели». Миша добавил в обработку ошибок причину отмены из ctx.Err, и графики разъехались на две разные кривые.
Err сообщает причину отмены — Canceled или DeadlineExceeded; Background — корень всех контекстов, а TODO — заглушка «решу позже».
Причина отмены
Что здесь показано
- Стек — локальные переменные функции.
i = 3— значение;p = ptr → 10— указатель на значение;b = "hello"— срез (заголовок: указатель + длина + ёмкость). - Куча — данные, на которые ссылаются переменные:
rodata— байты строки-литерала (в бинарнике),данные N Б— бэкинг-массив слайса,строка— динамическая строка. - Горутины — лёгкие потоки Go: статус (running/runnable/waiting…), функция, в которой каждая сейчас находится, размер стека (растёт по мере работы) и пометка «из main» — горутина запущена из твоего кода.
- GC — сборщик мусора: фаза (off/mark) и число завершённых циклов.
Err возвращает nil, пока контекст жив, и причину — после отмены. Различать Canceled и DeadlineExceeded важно: «клиент ушёл» и «мы не успели» — разные сценарии, разные метрики, разная реакция.
Background — корень
ctx := context.Background()
Background — пустой, никогда не отменяемый контекст. Это корень дерева: от него заводят все остальные. Он для верхнего уровня — main, инициализации, тестов.
TODO — честная заглушка
ctx := context.TODO()
TODO — тот же пустой контекст, но с другим смыслом: «здесь должен быть настоящий контекст, но пока не решил, какой». Отличие чисто человеческое: TODO в коде — маркер для будущего рефакторинга, Background — осознанный выбор «отмены не будет». Оба не отменяются никогда.
Вы узнаете:
- как проверять
Err()в select вместоDone() - как логировать причину отмены в метриках
Проверьте себя
Чем context.Canceled отличается от context.DeadlineExceeded?
Чем context.Background отличается от context.TODO?
правильных ответов
Err() — причина отмены: Canceled или DeadlineExceeded. Background — корень дерева, TODO — временная заглушка; оба никогда не отменяются.
10 000 ₽ · 60 минут · онлайн