Junior — Middle
Je povoleno odesílat zprávy do jednoho kanálu více gorutinami současně?
sobes.tech AI
Odpověď od AI
Ano, v Go je povoleno současně odesílat zprávy do jednoho kanálu z více gorutin. Kanály v Go jsou bezpečné pro vlákna a zajišťují synchronizaci mezi gorutinami.
Je však důležité pamatovat:
- Pokud několik gorutin zapisuje do jednoho kanálu a nikdo ho nečte, dojde k zablokování.
- Pokud je kanál bufferovaný, zápisy se zablokují pouze při naplnění bufferu.
- Je třeba opatrně spravovat uzavření kanálu: pouze odesílatel by ho měl uzavřít, a to pouze tehdy, když je jistý, že již nebude žádný zápis.
Příklad:
ch := make(chan int)
// Spuštění několika gorutin, které posílají data do kanálu
for i := 0; i < 3; i++ {
go func(id int) {
ch <- id
}(i)
}
// Čtení z kanálu
for i := 0; i < 3; i++ {
fmt.Println(<-ch)
}
Tímto způsobem je současné odesílání do kanálu z více gorutin standardní praxí v Go.