Middle
რა არის არხი Go-ში? რა ტიპის არხები არსებობს? რა განსხვავებაა ბუფერული და ბუფერული არხებს შორის?
sobes.tech AI
პასუხი AI-სგან
Go dilində kanal — bu, 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.
Misal üçün, bufferli kanal yaratmaq və istifadə etmək:
ch := make(chan int, 2) // buffer üçün 2 element
ch <- 1
ch <- 2
// ch <- 3 // bloklanır, yer boşaldıqda
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2