Sobes.tech
Middle

Go-da kanal nədir? Hansı növ kanallar mövcuddur? Bufferli və buffersiz kanalların fərqi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində kanal, goroutine'lar arasında dəyərləri ötürmək üçün istifadə olunan məlumat növüdür və sinxronizasiya və məlumat mübadiləsini təmin edir.

Kanal növləri:

  • Büfersiz kanallar — daxili bufferə malik deyil, göndərmə, alıcı dəyəri oxuyana qədər bloklanır.
  • Büferli kanallar — sabit ölçülü daxili bufferə malikdir və göndərmə yalnız buffer dolduqda bloklanır.

Fərqlər:

  • Büfersiz kanallarda, göndərən və alan eyni vaxtda hazır olmalıdır, bu da sərt sinxronizasiya təmin edir.
  • Büferli kanallarda, göndərən buffer dolmadan bir neçə dəyər yerləşdirə bilər, alıcı gözləmədən.

Büferli kanal yaratma və istifadə nümunəsi:

ch := make(chan int, 2) // 2 elementlik buffer
ch <- 1
ch <- 2
// ch <- 3 // buffer dolduqda bloklanır
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2