Реализуйте NewGenerator, который запускает горутину, бесконечно пишущую
случайные числа в возвращаемый канал. Особенность: генератор должен сам себя
«гасить». Если из канала никто не читает дольше 500ms, горутина должна
завершиться и закрыть канал — чтобы потребитель по v, ok := <-ch (где
ok == false) понял, что поток данных окончен, и не возникло утечки горутины.
// NewGenerator бесконечно пишет случайные числа в канал. Если из канала никто
// не читает дольше 500ms, генератор завершает горутину и закрывает канал.
func NewGenerator() <-chan int {
// Ваша реализация
}
Подсказка: используйте time.Timer (или time.After), сбрасывая таймаут после
каждой успешной отправки. В select конкурируют две ветки: отправка
очередного числа и срабатывание таймера бездействия.
На что смотрит интервьюер:
- Корректный сброс таймера именно при успешной отправке (а не на каждой итерации).
select с веткой таймаута, закрытие канала и выход из горутины.
- Нет утечки горутин: после простоя горутина действительно завершается.