Junior — Middle
Барномаи вақте ки аз каналҳои баста ва бе буферӣ истифода мебарад, чӣ гуна рафтор мекунад?
sobes.tech AI
Ҷавоб аз AI
Ҳангоми истифодаи range барои хондан аз канал дар Go, давр аз арзишҳо дар канал мегирад то он ки канал баста шавад. Агар канал баста шуда бошад ва ҳамаи арзишҳо аллакай хонда шуда бошанд, range даврро ба охир мерасонад.
Барои канал бе буфер, ин ҳамон тавр кор мекунад, ки барои канал бо буфер: агар канал баста шуда бошад, range монеа намешавад ва аз давр мебарояд.
Масалан:
ch := make(chan int)
func() {
ch <- 1
ch <- 2
close(ch)
}()
for v := range ch {
fmt.Println(v) // Мебинад 1 ва 2, сипас давр ба охир мерасад
}
Агар канал баста шуда бошад, аммо дар он маълумот набошад, range фавран ба охир мерасад. Агар канал баста нашуда бошад, аммо маълумот набошад, range интизор мешавад (монеа мегардад) то маълумот пайдо шавад ё канал баста шавад.