Aller au contenu

Instruction select

L’instruction select permet à une goroutine d’attendre sur plusieurs opérations de canal. Elle bloque jusqu’à ce qu’une de ses clauses puisse progresser. Si plusieurs sont prêtes, une est choisie aléatoirement.

Attendre sur deux canaux et afficher celui qui reçoit le premier.

package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan string)
ch2 := make(chan string)
go func() {
time.Sleep(1 * time.Second)
ch1 <- "un"
}()
go func() {
time.Sleep(2 * time.Second)
ch2 <- "deux"
}()
for i := 0; i < 2; i++ {
select {
case msg1 := <-ch1:
fmt.Println("Reçu", msg1)
case msg2 := <-ch2:
fmt.Println("Reçu", msg2)
}
}
}
Fenêtre de terminal
Reçu un
Reçu deux