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