Junior — Middle
Lehet-e értékeket több goroutine-ban egyszerre egy csatornából fogadni?
sobes.tech MI
Válasz az MI-től
Igen, több goroutine egyidejűleg kaphat értékeket egy csatornáról Go-ban. A csatornák Go-ban támogatják a több olvasást és írást, így több goroutine olvashat ugyanabból a csatornából párhuzamosan.
Fontos azonban megjegyezni, hogy ha több goroutine olvas ugyanabból a csatornából, minden érték csak egyikük által lesz fogadva — az értékek nem duplikálódnak. Ez hasznos a munka elosztásához a goroutine-ok között (munkás pool).
Példa:
ch := make(chan int)
// Több goroutine indítása, amelyek olvasnak a csatornáról
for i := 0; i < 3; i++ {
go func(id int) {
for val := range ch {
fmt.Printf("Goroutine %d kapta %d\n", id, val)
}
}(i)
}
// Adatok küldése a csatornára
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
Ebben a példában a csatorna értékei eloszlanak a három goroutine között.