Sobes.tech
Junior — Middle

Жабык жана буферсиз каналдан окуу үчүн range колдонулганда программа кандай иштейт?

sobes.tech AI

AIден жооп

Go'да range колдонуп, каналдан окуу үчүн, цикл каналдан маанилерди алат, канал жабылгандан кийин токтойт. Эгер канал жабылган жана бардык маанилер окулуп калса, range циклди аяктайт.

Буферсиз канал үчүн бул буферленген каналга окшош: эгер канал жабылган болсо, range блоктогон эмес жана циклден чыгат.

Мисал:

ch := make(chan int)
func() {
    ch <- 1
    ch <- 2
    close(ch)
}()

for v := range ch {
    fmt.Println(v) // 1 жана 2 чыгарат, андан кийин цикл аяктайт
}

Эгер канал жабылган болсо, бирок эч кандай маалымат жок болсо, range дароо аяктайт. Эгер канал жабылбаган болсо жана маалымат жок болсо, range күтөт (блоктолот) маалымат келип түшкөнчө же канал жабылгандан кийин.