Middle+
Σε ποια σειρά διαβάζει ο χειριστής select από πολλαπλά κανάλια;
sobes.tech AI
Απάντηση από AI
Στα Go, ο τελεστής select επιλέγει τυχαία ένα κανάλι που είναι έτοιμο (ready) αν υπάρχουν πολλά. Αν κανένα κανάλι δεν είναι έτοιμο, το select μπλοκάρει (αν δεν υπάρχει default).
Η σειρά ανάγνωσης από πολλά κανάλια δεν είναι σταθερή και δεν εγγυάται. Αυτό γίνεται για την αποφυγή μπλοκαρισμάτων και την εξασφάλιση δίκαιης κατανομής.
Παράδειγμα:
select {
case msg1 := <-chan1:
fmt.Println("Λήψη από chan1:", msg1)
case msg2 := <-chan2:
fmt.Println("Λήψη από chan2:", msg2)
default:
fmt.Println("Δεν υπάρχουν έτοιμα κανάλια")
}
Αν και τα δύο, chan1 και chan2, είναι έτοιμα, το Go θα επιλέξει τυχαία ένα από αυτά.