В Go стандартные ошибки context canceled и context deadline exceeded - это те ещё головняки, потому что они говорят, что что-то пошло не так, но умалчивают, почему именно. С версий 1.20 и 1.21 в языке появились функции вроде WithCancelCause и WithTimeoutCause, которые позволяют прикрутить к отмене контекста конкретную причину, например, "упал запрос к базе" или "клиент отвалился по таймауту". Но тут есть нюанс: если юзать WithTimeoutCause и функция завершилась успешно, стандартный defer cancel() затрёт вашу кастомную причину и вернёт скучное context.Canceled.
Автор предлагает два выхода: либо колхозить таймер руками через WithCancelCause, либо наворачивать контексты друг на друга, если очень нужно сохранить DeadlineExceeded. В конце ещё рассказывается, как всё это дело логировать с помощью context.Cause.
06.03.2026
Похожее
14.08.2026
Soppo
Пятничный язык программирования! Я про него уже писал, но он продолжает развиват...
12.08.2026
Typescript Defer
Автор экспериментировал с добавлением оператора defer из Go в компилятор TypeScr...
11.08.2026
Raft сломан
Ребята из Antithesis(я хз кто это) протестировали несколько популярных реализаци...
11.08.2026
Движение назад
Прикольная статья если вы хотите поковыряться в итераторах, джинериках и вот в э...