Найдите и устраните ошибки в Go‑программе

Используйте range по каналу: он прочитает накопленные 1–5 и завершится после опустошения закрытого канала. Исходный бесконечный цикл затем печатает нули, а не вызывает panic.

Короткий ответ

Что ответить на собеседовании

Используйте range по каналу: он прочитает накопленные 1–5 и завершится после опустошения закрытого канала. Исходный бесконечный цикл затем печатает нули, а не вызывает panic.

Подробный разбор

Ответ с пояснениями

Условие

В данном фрагменте Go‑кода присутствуют ошибки, из‑за которых программа не завершится корректно и может вызвать паническую ситуацию. Необходимо исправить их, чтобы последовательность чисел из канала выводилась полностью и программа завершалась без бесконечного цикла.

func main() {
  ch := make(chan int, 5)
  for i := 1; i <= 5; i++ {
    ch <- i
  }

  close(ch)

  for true {
    fmt.Println(<-ch)
  }
}

Ответ

Используйте range по каналу: он прочитает накопленные 1–5 и завершится после опустошения закрытого канала. Исходный бесконечный цикл затем печатает нули, а не вызывает panic.

Замените чтение на:

for value := range ch {
    fmt.Println(value)
}

Закрытие не удаляет уже отправленные значения. После их чтения операция <-ch немедленно возвращает нулевое значение int; в двухзначной форме ok=false. Именно отсутствие проверки окончания потока вызывает бесконечный вывод исходной программы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее