Junior — Middle
Cum să organizezi interacțiunea și transferul de date prin canale în sistem?
sobes.tech AI
Răspuns de la AI
În Go, interacțiunea între goroutines este adesea organizată prin canale (channels), care sunt conducte tipizate pentru transmiterea datelor.
Pentru a transmite date, se creează un canal cu make(chan Tip). Goroutine-urile pot trimite date în canal folosind operatorul <-, și pot primi date din același canal, ceea ce asigură sincronizarea.
Exemplu:
package main
import (
"fmt"
"time"
)
func producător(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i // trimiterea datelor
time.Sleep(time.Millisecond * 500)
}
close(ch) // închidem canalul pentru a semnala sfârșitul
}
func consumator(ch <-chan int) {
for val := range ch { // primirea datelor din canal
fmt.Println("Primite:", val)
}
}
func main() {
ch := make(chan int)
go producător(ch)
consumator(ch)
}
Astfel, canalele permit transmiterea sigură și eficientă a datelor între goroutines, evitând condițiile de cursă și blocările.