В Go стандартные ошибки context canceled и context deadline exceeded - это те ещё головняки, потому что они говорят, что что-то пошло не так, но умалчивают, почему именно. С версий 1.20 и 1.21 в языке появились функции вроде WithCancelCause и WithTimeoutCause, которые позволяют прикрутить к отмене контекста конкретную причину, например, "упал запрос к базе" или "клиент отвалился по таймауту". Но тут есть нюанс: если юзать WithTimeoutCause и функция завершилась успешно, стандартный defer cancel() затрёт вашу кастомную причину и вернёт скучное context.Canceled.
Автор предлагает два выхода: либо колхозить таймер руками через WithCancelCause, либо наворачивать контексты друг на друга, если очень нужно сохранить DeadlineExceeded. В конце ещё рассказывается, как всё это дело логировать с помощью context.Cause.
06.03.2026
Похожее
02.09.2026
Интересные баги
Команда sigma star(хз кто это) нашла и исправила давнюю ошибку в рантайме Go, пр...
01.09.2026
GopherCon UK 2026
Видосы с GopherCon UK 2026 подоспели. Много всего интересного. Девид Чейни, Билл...
31.08.2026
Используем Datastar
В статье интеренсно про использование Datastar. Я вот первый раз про него услаша...
27.08.2026
На Rust после Go
Автор, пять лет писавший на Go, сначала скептически отнесся к появлению Rust в е...