Sobes.tech
Senior

Қайсысы келесі код үзінділерінің бірі арналармен жұмыс істеу кезінде қате немесе әлеуетті мәселені қамтиды? 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

Ҷавоб аз 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 аст — блокшавӣ дар вақти фиристодан ба канал бе буфер ва бе қабулкунанда.