Sobes.tech
Junior — Middle

Lze získávat hodnoty z jednoho kanálu ve více goroutinách současně?

sobes.tech AI

Odpověď od AI

Ano, několik gorutin může současně přijímat hodnoty z jednoho kanálu v Go. Kanály v Go podporují vícenásobné čtení a zápis, což umožňuje několika gorutinám číst z jednoho kanálu paralelně.

Je však důležité vzít na vědomí, že pokud několik gorutin čte z jednoho kanálu, každá hodnota bude přijata pouze jednou — hodnoty se neopakují. To je užitečné pro rozdělení práce mezi gorutiny (pracovní pool).

Příklad:

ch := make(chan int)

// Spouštíme několik gorutin, které čtou z kanálu
for i := 0; i < 3; i++ {
    go func(id int) {
        for val := range ch {
            fmt.Printf("Goroutine %d obdržela %d\n", id, val)
        }
    }(i)
}

// Posíláme data do kanálu
for i := 0; i < 10; i++ {
    ch <- i
}
close(ch)

V tomto příkladu jsou hodnoty z kanálu rozděleny mezi tři gorutiny.