Middle
Ce este un canal în Go? Care sunt tipurile de canale? Care este diferența dintre canalele cu buffer și cele fără buffer?
sobes.tech AI
Răspuns de la AI
Un canal în Go este un tip de date utilizat pentru a transmite valori între goroutines, asigurând sincronizarea și schimbul de date.
Tipuri de canale:
- Canale fără buffer — nu au buffer intern, trimiterea se blochează până când receptorul citește valoarea.
- Canale cu buffer — au un buffer intern de dimensiune fixă, iar trimiterea se blochează doar dacă bufferul este plin.
Diferențe:
- În canalele fără buffer, expeditorul și receptorul trebuie să fie gata în același timp pentru a trimite/recepționa, ceea ce asigură o sincronizare strictă.
- În canalele cu buffer, expeditorul poate plasa mai multe valori în buffer fără a aștepta receptorul, până când bufferul se umple.
Exemplu de creare și utilizare a unui canal cu buffer:
ch := make(chan int, 2) // buffer pentru 2 elemente
ch <- 1
ch <- 2
// ch <- 3 // se blochează până se eliberează spațiu
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2