Sobes.tech
Middle+

W jakiej kolejności operator select odczytuje z wielu kanałów?

sobes.tech AI

Odpowiedź od AI

W Go operator select losowo wybiera gotowy (ready) kanał, jeśli jest ich kilka. Jeśli żaden kanał nie jest gotowy, select się blokuje (jeśli nie ma default).

Kolejność odczytu z wielu kanałów nie jest ustalona ani gwarantowana. Zostało to zrobione, aby zapobiec blokadom i zapewnić sprawiedliwy podział.

Przykład:

select {
case msg1 := <-chan1:
    fmt.Println("Otrzymano z chan1:", msg1)
case msg2 := <-chan2:
    fmt.Println("Otrzymano z chan2:", msg2)
default:
    fmt.Println("Brak gotowych kanałów")
}

Jeśli oba, chan1 i chan2, są gotowe, Go losowo wybierze jeden z nich.