Junior — Middle
Можеш ли да наведеш пример када и како се користе канали за размену података између нити или горутина?
sobes.tech АИ
Одговор од АИ
U Go, kanali se koriste za sigurnu razmenu podataka između gorutina, omogućavajući njihovu sinhronizaciju i prenos vrednosti.
Primer korišćenja kanala za prenos brojeva iz jedne gorutine u drugu:
package main
import (
"fmt"
"time"
)
func producer(ch chan int) {
for i := 0; i < 5; i++ {
ch <- i // slanje podataka u kanal
time.Sleep(time.Millisecond * 500)
}
close(ch) // zatvaranje kanala nakon slanja svih podataka
}
func consumer(ch chan int) {
for val := range ch { // primanje podataka iz kanala
fmt.Println("Primljeno:", val)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
Ovde, producer šalje brojeve u kanal, a consumer ih čita. Kanali obezbeđuju sigurnu razmenu podataka bez potrebe za korišćenjem muteksa ili drugih mehanizama za sinhronizaciju.