Sobes.tech
Junior — Middle

Poți oferi un exemplu despre când și cum sunt folosite canalele pentru schimbul de date între fire sau goroutines?

sobes.tech AI

Răspuns de la AI

În Go, canalele sunt utilizate pentru schimbul sigur de date între goroutines, permițând sincronizarea acestora și transmiterea valorilor.

Exemplu de utilizare a unui canal pentru transmiterea numerelor de la o goroutine la alta:

package main

import (
    "fmt"
    "time"
)

func producer(ch chan int) {
    for i := 0; i < 5; i++ {
        ch <- i // transmiterea datelor în canal
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // închiderea canalului după transmiterea tuturor datelor
}

func consumer(ch chan int) {
    for val := range ch { // primirea datelor din canal
        fmt.Println("Primite:", val)
    }
}

func main() {
    ch := make(chan int)
    go producer(ch)
    consumer(ch)
}

Aici, producer trimite numere în canal, iar consumer le citește. Canalele asigură o transmitere sigură a datelor fără a fi nevoie de mutexuri sau alte mecanisme de sincronizare.