Sobes.tech
Junior — Middle

რა ხდება, თუ ცდილობთ წაიკითხოთ მონაცემები არხიდან, რომელიც ამჟამად არ შეიცავს ელემენტებს?

sobes.tech AI

პასუხი AI-სგან

Go ენის ფარგლებში, თუ სცადეთ წაკითხვა არხიდან, რომელიც ამ მომენტში არ შეიცავს ელემენტებს, ქცევა დამოკიდებულია არხის ტიპზე:

  • ბუფერული არხი: თუ ბუფერი ცარიელია, წაკითხვა ბლოკდება, სანამ არხში არ ჩაიწერება ელემენტი.
  • ბუფერის გარეშე არხი: წაკითხვა ბლოკდება, სანამ სხვა goroutine არ გამოაგზავნის მნიშვნელობას.

ამიტომ, ცარიელ არხიდან წაკითხვა იწვევს მიმდინარე goroutine-ის ბლოკირებას, სანამ მონაცემები არ გამოჩნდება ან არხი არ დაიხურება.

მაგალითი:

ch := make(chan int)

// ცარიელ არხიდან წაკითხვა ბლოკავს შესრულებას
val := <-ch // ბლოკდება, სანამ ვინმე არ გამოაგზავნის მნიშვნელობას

// ბლოკირების თავიდან ასაცილებლად, შეგიძლიათ გამოიყენოთ select-ი default-თან ერთად
select {
case val := <-ch:
    fmt.Println("მიღებული", val)
default:
    fmt.Println("არხში მონაცემები არ არის")
}