Sobes.tech
Junior — Middle

Podes dar um exemplo de quando e como os canais são usados para trocar dados entre threads ou goroutines?

sobes.tech IA

Resposta da IA

Em Go, os canais são usados para trocar dados de forma segura entre goroutines, permitindo sincronizá-las e transmitir valores.

Exemplo de uso de um canal para transmitir números de uma goroutine para outra:

package main

import (
    "fmt"
    "time"
)

func produtor(ch chan int) {
    for i := 0; i < 5; i++ {
        ch <- i // envia dados para o canal
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // fecha o canal após enviar todos os dados
}

func consumidor(ch chan int) {
    for val := range ch { // recebe dados do canal
        fmt.Println("Recebido:", val)
    }
}

func main() {
    ch := make(chan int)
    go produtor(ch)
    consumidor(ch)
}

Aqui, produtor envia números para o canal, e consumidor os lê. Os canais garantem uma transmissão segura de dados sem a necessidade de usar mutexes ou outros mecanismos de sincronização.