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.