Sobes.tech
Middle+

Milyen sorrendben olvas az select operátor több csatornáról?

sobes.tech MI

Válasz az MI-től

Go-ban a select operátor véletlenszerűen választ egy kész (ready) csatornát, ha több van. Ha egyik csatorna sem kész, a select blokkolódik (ha nincs default).

A több csatornából való olvasás sorrendje nem fix és nem garantált. Ez a blokkolások elkerülése és az igazságos elosztás biztosítása érdekében történik.

Példa:

select {
case msg1 := <-chan1:
    fmt.Println("Kaptam chan1-ből:", msg1)
case msg2 := <-chan2:
    fmt.Println("Kaptam chan2-ből:", msg2)
default:
    fmt.Println("Nincs kész csatorna")
}

Ha mindkettő, a chan1 és a chan2, kész, a Go véletlenszerűen választ egyet közülük.