Обнаружьте проблему в Go‑программе

Программа не компилируется: chan int нельзя передать параметру chan any. После простого исправления типа она всё равно зависнет, потому что функция ch ничего не читает.

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

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

Программа не компилируется: chan int нельзя передать параметру chan any. После простого исправления типа она всё равно зависнет, потому что функция ch ничего не читает.

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

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

Условие

В представленном фрагменте кода на Go требуется найти ошибку, из‑за которой программа не компилируется или приводит к зависанию.

package main

func main() {
  chInt := make(chan int)

  go ch(chInt)

  chInt <- 12
  chInt <- 43
}

func ch(chAny chan any) {
}

Ответ

Программа не компилируется: chan int нельзя передать параметру chan any. После простого исправления типа она всё равно зависнет, потому что функция ch ничего не читает.

Корректный вариант с каналом int:

func ch(input <-chan int, done chan<- struct{}) {
    defer close(done)
    for range input {}
}
func main() {
    input := make(chan int)
    done := make(chan struct{})
    go ch(input, done)
    input <- 12
    input <- 43
    close(input)
    <-done
}

Каналы разных типов не ковариантны, хотя отдельное int можно упаковать в any. Пример потребляет значения без печати и явно ждёт окончания обработки.

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

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

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

Подробнее