Вопрос проверяет знание context.
Используют context.WithTimeout или context.WithDeadline в комбинации с select, чтобы завершить операцию по истечении времени.
В Go время ожидания операций удобно контролировать через context. Для этого создают новый context с таймаутом (context.WithTimeout) или с конкретным дедлайном (context.WithDeadline). Полученный context передают в функцию, которая должна поддерживать завершение по <-ctx.Done(). Чтобы обработать истечение времени, обычно используют оператор select, в котором один case — это канал с результатом работы, а второй — <-ctx.Done(). Когда наступает дедлайн или таймаут, context автоматически закрывает свой канал Done, и функция может корректно завершить работу. Такой подход часто применяется в HTTP-запросах, работе с базами данных и внешними сервисами.
Вывод: Управление временем ожидания через context — стандартный и надёжный способ предотвратить зависания и утечки горутин.