Sobes.tech
Junior — Middle

Pode dar um exemplo de métodos de trabalho com canais sem usar goroutines?

sobes.tech IA

Resposta da IA

Os canais em Go são geralmente usados para comunicação entre goroutines, mas também podem ser utilizados sem lançar goroutines adicionais, por exemplo, para transmissão de dados síncrona.

Exemplo:

package main

import "fmt"

func main() {
    ch := make(chan int)

    // Envio e recepção em um único thread (sem goroutines)
    go func() {
        ch <- 42
    }()

    val := <-ch
    fmt.Println(val)
}

No entanto, neste exemplo, uma goroutine é usada para enviar, para evitar bloqueio. Se não usar goroutines de forma alguma, o envio e a recepção devem ocorrer sequencialmente, por exemplo:

package main

import "fmt"

func main() {
    ch := make(chan int, 1) // Canal com buffer

    ch <- 10  // Envia para o canal com buffer
    val := <-ch // Recebe do canal

    fmt.Println(val)
}

Aqui, o canal com buffer permite enviar um valor sem bloqueio, pois há espaço no buffer. Assim, métodos de trabalho com canais sem goroutines são possíveis ao usar canais com buffer e envio/recebimento sequencial.