Le Go par l'exemple: Canaux avec buffer

Par défaut les canaux n’ont pas de buffer, ce qui signifie qu’ils acceptent uniquement les envois (chan <-) s’il y a un receveur correspondant (<- chan) prêt à recevoir la valeur envoyée. Les canaux avec buffer acceptent un nombre limité de valeurs sans receveur correspondant pour ces valeurs.

package main
import "fmt"

Ici on crée avec make un canal avec buffer, qui accumule jusqu’à 2 string.

func main() {
    messages := make(chan string, 2)

Comme ce canal a un buffer, nous pouvons envoyer ces deux valeurs dans le canal sans une réception concurrente correspondante.

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

Ensuite, on peut recevoir ces deux valeurs comme d’habitude.

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

Exemple suivant: Synchronisation des canaux.