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