Да: если после тайм-аута никто не читает результат, горутина может навсегда заблокироваться на отправке. Это часто утечка горутины, а не остановка всей программы.
Может ли возникнуть блокировка (deadlock) в реализации с горутиной и каналом для predictableFunc с таймаутом?
Да: если после тайм-аута никто не читает результат, горутина может навсегда заблокироваться на отправке. Это часто утечка горутины, а не остановка всей программы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Да: если после тайм-аута никто не читает результат, горутина может навсегда заблокироваться на отправке. Это часто утечка горутины, а не остановка всей программы.
Для одного результата буфер канала размером 1 позволяет завершить отправку, даже если вызывающий уже ушёл. Но он не останавливает саму predictableFunc, если она зависла.
Лучше передавать контекст внутрь операции и делать отправку с альтернативой ctx.Done. Без исходного кода нельзя доказать конкретный deadlock; нужно проверить всех отправителей, получателей и пути возврата.