Junior — Middle
Tudnál példát mondani arra, mikor és hogyan használják a csatornákat az adatok cseréjére szálak vagy goroutine-ok között?
sobes.tech MI
Válasz az MI-től
A Go nyelvben a csatornák biztonságos adatcserére szolgálnak a goroutine-ok között, lehetővé téve azok szinkronizálását és értékek továbbítását.
Példa egy csatorna használatára, amely számokat továbbít egyik goroutine-tól a másikig:
package main
import (
"fmt"
"time"
)
func producer(ch chan int) {
for i := 0; i < 5; i++ {
ch <- i // adatok küldése a csatornába
time.Sleep(time.Millisecond * 500)
}
close(ch) // a csatorna bezárása az összes adat küldése után
}
func consumer(ch chan int) {
for val := range ch { // adatok fogadása a csatornából
fmt.Println("Kaptuk:", val)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
Itt a producer számokat küld a csatornába, a consumer pedig olvassa azokat. A csatornák biztosítják az adatok biztonságos átadását mutexek vagy más szinkronizációs mechanizmusok használata nélkül.