Sobes.tech
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 — блокировка при отправке в небуферизованный канал без получателя.