Sobes.tech
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