Junior — Middle
É permitido enviar mensagens para um único canal com várias goroutines ao mesmo tempo?
sobes.tech IA
Resposta da IA
Sim, no Go é permitido enviar mensagens a um canal de várias goroutines ao mesmo tempo. Os canais em Go são seguros para concorrência e fornecem sincronização entre goroutines.
No entanto, é importante lembrar:
- Se várias goroutines escreverem num mesmo canal e ninguém o ler, isso causará bloqueio.
- Se o canal for com buffer, as gravações só bloquearão quando o buffer estiver cheio.
- É necessário gerir cuidadosamente o encerramento do canal: apenas o remetente deve fechá-lo, e somente quando tiver certeza de que não haverá mais gravações.
Exemplo:
ch := make(chan int)
// Executar várias goroutines enviando dados ao canal
for i := 0; i < 3; i++ {
go func(id int) {
ch <- id
}(i)
}
// Ler do canal
for i := 0; i < 3; i++ {
fmt.Println(<-ch)
}
Assim, enviar simultaneamente para um canal de várias goroutines é uma prática padrão em Go.