Senior
30
Төмендегі код үзінділерінің қайсысы каналдармен жұмыс істеуге байланысты қате немесе әлеуетті мәселені қамтиды? 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
AI-дан жауап
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 — блокировка при отправке в небуферизованный канал без получателя.