Sobes.tech
Junior — Middle

Je správanie funkcie select v Go predvídateľné alebo náhodné?

sobes.tech AI

Odpoveď od AI

Správanie funkcie select v Go je čiastočne predvídateľné, ale v prípade, že je viacero kanálov pripravených súčasne, výber kanála je náhodný (náhodný). Toto je urobené na zabránenie blokov a zabezpečenie spravodlivého rozdelenia.

Ak je pripravený iba jeden kanál, select ho vyberie. Ak žiadny kanál nie je pripravený a nie je tam default, select sa zablokuje.

Príklad:

select {
case msg1 := <-chan1:
    fmt.Println("Prijaté z kanála 1", msg1)
case msg2 := <-chan2:
    fmt.Println("Prijaté z kanála 2", msg2)
default:
    fmt.Println("Žiadny kanál nie je pripravený")
}

Ak sú oba kanály pripravené, výber medzi nimi bude náhodný.