Sobes.tech
Middle+

V akom poradí číta operátor select z viacerých kanálov?

sobes.tech AI

Odpoveď od AI

V Go operátor select náhodne vyberie jeden z pripravených (ready) kanálov, ak ich je viac. Ak žiadny kanál nie je pripravený, select sa zablokuje (ak nie je default).

Poradie čítania z viacerých kanálov nie je pevne stanovené a nie je garantované. Toto je urobené na zabránenie zablokovaniu a zabezpečenie spravodlivého rozdelenia.

Príklad:

select {
case msg1 := <-chan1:
    fmt.Println("Prijaté z chan1:", msg1)
case msg2 := <-chan2:
    fmt.Println("Prijaté z chan2:", msg2)
default:
    fmt.Println("Žiadne pripravené kanály")
}

Ak sú oba, chan1 a chan2, pripravené, Go náhodne vyberie jeden z nich.