Sobes.tech
Junior — Middle

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

sobes.tech AI

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

Go dilində, kanaldan məlumatları buffer olmadan oxumaq üçün bloklamayan oxuma və ya məlumat mövcudluğunu yoxlayan oxuma istifadə edilməlidir. Kanallar standart olaraq bufferli və ya buffersiz ola bilər, lakin buffersiz oxumaq üçün adətən buffersiz kanallar və <- operatoru istifadə olunur.

Buffersiz kanaldan oxuma nümunəsi:

ch := make(chan int) // buffersiz kanal

// Ayrı bir goroutine'da göndərmə
go func() {
    ch <- 42
}()

// Oxuma (məlumatlar mövcud olana qədər gözləyəcək)
value := <-ch
fmt.Println(value) // 42

Oxuma zamanı bloklamanı qarşısını almaq üçün selectdefault ilə quruluş istifadə oluna bilər:

select {
case val := <-ch:
    fmt.Println("Qəbul edildi", val)
default:
    fmt.Println("Məlumat yoxdur")
}