Go por Exemplo: Buferização de Canal

Por padrão canais são não buferizados, significando que eles só aceitarão envios (chan <-) se houver um receptor correspondente (<- chan) pronto para receber o valor enviado. Canais buferizados aceitam um número limitado de valores sem um receptor correspondente para esses valores.

package main
import "fmt"
func main() {

Aqui nós fizemos um canal de strings buferizadas em 2 valores.

    mensagens := make(chan string, 2)

Por esse canal ser buferizado, nós podemos enviar esses valores em um canal sem um receptor concorrente correspondente.

    mensagens <- "buferizado"
    mensagens <- "canal"

Depois nós podemos receber esses dois valores, como de costume.

    fmt.Println(<-mensagens)
    fmt.Println(<-mensagens)
}
$ go run buferizacao-canal.go
buferizado
canal

Próximo exemplo: Sincronização de Canal.