Sobes.tech
Junior — Middle

Kanaldan oxuma əməliyyatı tampon istifadə etmədən mümkün mü?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da, kanaldan (chan) oxuma əməliyyatı buffer olmadan yalnız kanal bufferli olsa mümkündür. Əgər kanal buffersizdirsə (ölçüsü 0), oxuma əməliyyatı kanalə dəyər göndəriləndə qədər bloklanır.

Beləliklə:

  • Buffersiz, bloklamayan oxuma üçün, kanal ilə bloklamayan əməliyyatlar istifadə olunmalıdır (məsələn, select ilə default), amma bu məlumatların alınmasını təmin etmir.
  • Əgər kanal buffersizdirsə, oxuma hər zaman bloklanır, kimsə məlumat göndərənə qədər.

Bufferli kanal nümunəsi:

ch := make(chan int, 1) // 1 elementlik buffer
ch <- 42                // dəyər göndəririk
val := <-ch             // bloklamadan oxuyuruq

Əgər kanal buffersizdirsə, oxuma və yazma birbaşa goroutine-lər arasında sinxronlaşır.