В Go стандартные ошибки context canceled и context deadline exceeded - это те ещё головняки, потому что они говорят, что что-то пошло не так, но умалчивают, почему именно. С версий 1.20 и 1.21 в языке появились функции вроде WithCancelCause и WithTimeoutCause, которые позволяют прикрутить к отмене контекста конкретную причину, например, "упал запрос к базе" или "клиент отвалился по таймауту". Но тут есть нюанс: если юзать WithTimeoutCause и функция завершилась успешно, стандартный defer cancel() затрёт вашу кастомную причину и вернёт скучное context.Canceled.
Автор предлагает два выхода: либо колхозить таймер руками через WithCancelCause, либо наворачивать контексты друг на друга, если очень нужно сохранить DeadlineExceeded. В конце ещё рассказывается, как всё это дело логировать с помощью context.Cause.
06.03.2026
Похожее
05.03.2026
Аллокаторы
Автор продолжает цикл статей про рантайм Go. Теперь на очереде разбор аллокаторо...
04.03.2026
eBPF и XDP
Еще одна неплохая статья по eBPF Аббревиатура eBPF расшифровывается как exten...
03.03.2026
Уменьшаем бинарник
Инженеры Datadog рассказали, как всего за полгода им удалось "похудеть". Они уме...
02.03.2026
Sssssh
Автор запилил многопользовательскую "Змейку", в которую можно играть прямо в тер...