Sobes.tech
Junior — Middle

Pode dar um exemplo de cenário onde um canal com buffer é utilizado para transmissão de dados?

sobes.tech IA

Resposta da IA

O canal com buffer em Go é utilizado quando é necessário transmitir dados entre goroutines, mas sem bloquear imediatamente o remetente se o receptor ainda não estiver pronto para aceitar os dados. Por exemplo, num cenário onde há um produtor que gera dados mais rapidamente do que o consumidor os processa, um canal com buffer permite acumular vários elementos sem fazer o produtor esperar.

Exemplo:

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int, 3) // buffer de 3 elementos

    // Produtor
    go func() {
        for i := 1; i <= 5; i++ {
            fmt.Printf("Envio: %d\n", i)
            ch <- i // não bloqueia até o buffer estar cheio
        }
        close(ch)
    }()

    // Consumidor
    time.Sleep(time.Second) // simulamos atraso
    for val := range ch {
        fmt.Printf("Recebido: %d\n", val)
        time.Sleep(500 * time.Millisecond) // processamento lento
    }
}

Neste exemplo, o produtor pode enviar os primeiros 3 valores ao canal com buffer sem bloqueio, e depois aguardará até que o consumidor libere espaço.