Junior — Middle
Como organizar a interação e a transferência de dados através de canais no sistema?
sobes.tech IA
Resposta da IA
No Go, a interação entre goroutines é frequentemente organizada através de canais (channels), que são condutas tipadas para transmissão de dados.
Para transmitir dados, cria-se um canal com make(chan Tipo). As goroutines podem enviar dados para o canal usando o operador <-, e também receber dados do canal com o mesmo operador, garantindo a sincronização.
Exemplo:
package main
import (
"fmt"
"time"
)
func produtor(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i // envio de dados
time.Sleep(time.Millisecond * 500)
}
close(ch) // fechamos o canal para sinalizar o fim
}
func consumidor(ch <-chan int) {
for val := range ch { // recepção de dados do canal
fmt.Println("Recebido:", val)
}
}
func main() {
ch := make(chan int)
go produtor(ch)
consumidor(ch)
}
Desta forma, os canais permitem transmitir dados entre goroutines de forma segura e eficiente, evitando condições de corrida e bloqueios.