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.