Sobes.tech
Назад к вопросам
Senior
2

Какой из следующих фрагментов кода содержит ошибку или потенциальную проблему, связанную с работой с каналами? Вариант 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 }

Компании, где спрашивали
01.tech

Ответ от нейросети

sobes.tech AI

Ошибка содержится в Варианте 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 — блокировка при отправке в небуферизованный канал без получателя.