Post Thumbnail

В Go стандартные ошибки context canceled и context deadline exceeded - это те ещё головняки, потому что они говорят, что что-то пошло не так, но умалчивают, почему именно. С версий 1.20 и 1.21 в языке появились функции вроде WithCancelCause и WithTimeoutCause, которые позволяют прикрутить к отмене контекста конкретную причину, например, "упал запрос к базе" или "клиент отвалился по таймауту". Но тут есть нюанс: если юзать WithTimeoutCause и функция завершилась успешно, стандартный defer cancel() затрёт вашу кастомную причину и вернёт скучное context.Canceled.

Автор предлагает два выхода: либо колхозить таймер руками через WithCancelCause, либо наворачивать контексты друг на друга, если очень нужно сохранить DeadlineExceeded. В конце ещё рассказывается, как всё это дело логировать с помощью context.Cause.

Похожее

Post Thumbnail

Аллокаторы

Автор продолжает цикл статей про рантайм Go. Теперь на очереде разбор аллокаторо...

Post Thumbnail

eBPF и XDP

Еще одна неплохая статья по eBPF Аббревиатура eBPF расшифровывается как exten...

Post Thumbnail

Sssssh

Автор запилил многопользовательскую "Змейку", в которую можно играть прямо в тер...