Go · Essencial · Inglês · Técnico
buffered channel
Channel criado com capacidade maior que zero. O envio só bloqueia quando o buffer está cheio, e o recebimento só bloqueia quando ele está vazio.
Onde usar
Útil para absorver picos entre produtor e consumidor sem sincronizar cada item. A capacidade é uma decisão de design, não um remédio para deadlock.
Em código
ch := make(chan string, 2)
ch <- "a"
ch <- "b" // não bloqueia
fmt.Println(len(ch), cap(ch)) // 2 2Exemplos
A buffered channel of size 100 smooths out the spikes.
Um channel com buffer de 100 suaviza os picos.
The send doesn't block because the buffer still has room.
O envio não bloqueia porque o buffer ainda tem espaço.
Cuidado
Aumentar o buffer para fazer um deadlock sumir só esconde o problema de sincronização.
Sinônimos
channel com buffer
Antônimos
unbuffered channel