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