Sobes.tech
Junior — Middle

Bağlı və tamponlamayan kanal üçün range istifadə edərkən proqram necə davranır?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da kanal vasitəsilə oxumaq üçün range istifadə edildikdə, döngü kanaldan dəyərlər alır və kanal bağlanana qədər davam edir. Əgər kanal bağlanıb və bütün dəyərlər oxunubsa, range döngünü bitirir.

Buffersiz kanal üçün bu, bufferli kanal ilə eynidir: əgər kanal bağlanıbsa, range bloklanmır və döngüdən çıxır.

Nümunə:

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

for v := range ch {
    fmt.Println(v) // 1 və 2 çap edir, sonra döngü bitir
}

Əgər kanal bağlanıbsa, amma içində məlumat yoxdursa, range dərhal bitir. Əgər kanal bağlanmayıbsa və məlumat yoxdursa, range gözləyəcək (bloke olacaq) məlumat gələnə və ya kanal bağlanana qədər.