Sobes.tech
Junior — Middle

Kapalı ve tamponlamayan bir kanaldan okuma yapmak için range kullanıldığında program nasıl davranır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da bir kanaldan okuma yapmak için range kullanıldığında, döngü kanaldan değerler alır ve kanal kapatılana kadar devam eder. Eğer kanal kapatılmış ve tüm değerler okunmuşsa, range döngüyü sonlandırır.

Buffer'lı olmayan bir kanal için bu, buffer'lı olanla aynıdır: kanal kapatılmışsa, range engellenmez ve döngüden çıkar.

Örnek:

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

for v := range ch {
    fmt.Println(v) // 1 ve 2 yazdırır, sonra döngü sona erer
}

Kanal kapatılmışsa ve içinde veri yoksa, range hemen sona erer. Kanal kapalı değilse ve veri yoksa, range bekler (bloklanır) ta ki veri gelsin veya kanal kapansın.