Sobes.tech
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.