В Go стандартные ошибки context canceled и context deadline exceeded - это те ещё головняки, потому что они говорят, что что-то пошло не так, но умалчивают, почему именно. С версий 1.20 и 1.21 в языке появились функции вроде WithCancelCause и WithTimeoutCause, которые позволяют прикрутить к отмене контекста конкретную причину, например, "упал запрос к базе" или "клиент отвалился по таймауту". Но тут есть нюанс: если юзать WithTimeoutCause и функция завершилась успешно, стандартный defer cancel() затрёт вашу кастомную причину и вернёт скучное context.Canceled.
Автор предлагает два выхода: либо колхозить таймер руками через WithCancelCause, либо наворачивать контексты друг на друга, если очень нужно сохранить DeadlineExceeded. В конце ещё рассказывается, как всё это дело логировать с помощью context.Cause.
06.03.2026
Похожее
04.06.2026
Иггдрасиль
В статье про использование Yggdrasil в качестве встраиваемой Go-библиотеки. ...
03.06.2026
Мультиплеер
В статье автор рассказывает про архитектуру управления состоянием своей многопол...
02.06.2026
httptrace
Пакет net/http/httptrace из стандартной библиотеки Go позволяет отслеживать внут...
01.06.2026
Руководство по миграции с Go на Rust
Подробное руководство по миграции с Go на Rust для бэкенд-сервисов. Автор об...