Sobes.tech
Junior — Middle

Chová se funkce select v Go předvídatelně nebo náhodně?

sobes.tech AI

Odpověď od AI

Chování funkce select v Go je částečně předvídatelné, ale v případě, že je více kanálů připraveno současně, výběr kanálu je náhodný (náhodný). To je provedeno, aby se zabránilo zablokování a zajistilo spravedlivé rozdělení.

Pokud je připraven pouze jeden kanál, select ho vybere. Pokud žádný kanál není připraven a není zde default, select se zablokuje.

Příklad:

select {
case msg1 := <-chan1:
    fmt.Println("Přijato z kanálu 1", msg1)
case msg2 := <-chan2:
    fmt.Println("Přijato z kanálu 2", msg2)
default:
    fmt.Println("Žádný kanál není připraven")
}

Pokud jsou oba kanály připraveny, výběr mezi nimi je náhodný.