Aller au contenu

Opérations non bloquantes sur canaux

Un select avec une clause default permet des envois et réceptions non bloquants. Si aucune opération sur canal n’est prête, la clause default s’exécute immédiatement.

Essayer de recevoir d’un canal sans bloquer.

package main
import "fmt"
func main() {
ch := make(chan string)
select {
case msg := <-ch:
fmt.Println("reçu", msg)
default:
fmt.Println("aucun message reçu")
}
// Envoi non bloquant
select {
case ch <- "bonjour":
fmt.Println("envoyé")
default:
fmt.Println("l'envoi bloquerait")
}
}
Fenêtre de terminal
aucun message reçu
l'envoi bloquerait