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.