Go Em Exemplos: Channel Buffering

Por padrão canais são unbuffered, ou seja, apenas aceitam envios (chan <-) se há um recebimento correspondente (<- chan) pronto para receber. Canais Buffered aceitam um número limitado de valores sem um recebimento correspondente.

package main
import "fmt"
func main() {

Aqui é criado um canal de strings que armazena até dois valores, ou seja, trata-se de um canal buffered.

    messages := make(chan string, 2)

Por ser buffered é possível enviar valores para o canal, sem ter um recebimento correspondente.

    messages <- "buffered"
    messages <- "channel"

Posteriormente os valores são recebidos normalmente.

    fmt.Println(<-messages)
    fmt.Println(<-messages)
}
$ go run channel-buffering.go 
buffered
channel

Próximo exemplo: Channel Synchronization.