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 ელოდება (ბლოკირდება) მონაცემების მოსვლამდე ან სარკინიგზოს დახურვამდე.