Какой из следующих фрагментов кода содержит ошибку или потенциальную проблему, связанную с работой с каналами?

Ошибка содержится в Варианте 1:

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

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

Ошибка содержится в Варианте 1:

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

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

Условие

Какой из следующих фрагментов кода содержит ошибку или потенциальную проблему, связанную с работой с каналами?

Вариант 1 package main func main() { ch := make(chan int) ch <- 1 }

Вариант 2 package main func main() { ch := make(chan int, 1) ch <- 1 }

Вариант 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch }

Вариант 4 package main func main() { ch := make(chan int) close(ch) <-ch }

Вариант 5 package main func main() { ch := make(chan int, 3) ch <- 4 }

Ответ

Ошибка содержится в Варианте 1:

package main
func main() {
    ch := make(chan int)
    ch <- 1
}

Здесь создаётся небуферизованный канал ch := make(chan int). Отправка в такой канал ch <- 1 блокируется до тех пор, пока кто-то не прочитает из канала. В данном коде нет никакого получателя, поэтому программа зависнет навсегда (deadlock).

Вариант 2 корректен, так как канал буферизованный с размером 1, и отправка не блокируется, если буфер не заполнен.

Вариант 3 тоже корректен: отправка и получение сбалансированы.

Вариант 4 корректен: закрытый канал можно читать, чтение вернёт нулевое значение и не блокируется.

Вариант 5 корректен: буфер 3, отправляется одно значение, буфер не переполнен.

Итого, проблема только в Варианте 1 — блокировка при отправке в небуферизованный канал без получателя.

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

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

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

Подробнее