Проверяет понимание отмены операций и жизненного цикла запросов.
context.WithTimeout создаёт контекст, который автоматически отменяется по истечении заданного времени. После таймаута закрывается ctx.Done(), а ctx.Err() возвращает context.DeadlineExceeded.
происходит следующее:
создаётся дочерний контекст;
запускается таймер;
по истечении времени:
вызывается cancel;
закрывается ctx.Done();
ctx.Err() начинает возвращать DeadlineExceeded.
Любой код, который слушает <-ctx.Done(), должен корректно завершиться.
Важно помнить:
таймаут не прерывает выполнение автоматически — код обязан его проверять;
если не вызвать cancel(), таймер и контекст будут висеть дольше нужного;
WithTimeout часто используется для:
запросов к БД,
HTTP/gRPC вызовов,
внешних API.
Вывод: контекст — это контракт между слоями: “если отменили — остановись”.