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