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("არხში მონაცემები არ არის")
}