Sobes.tech
Junior — Middle

Co se provádí jako první v příkazu výběru: zpracování dat z kanálu nebo čtení z aktuálního kontextu?

sobes.tech AI

Odpověď od AI

V příkazu select v jazyce Go závisí pořadí provádění od připravenosti kanálů a dalších operací. Pokud jsou současně připraveny více případů, je vybrán náhodný z nich.

Pokud jde o srovnání zpracování dat z kanálu a čtení z kontextu (context):

  • Pokud v selectu existuje případ pro čtení z kanálu a jiný pro čtení z kontextu (například <-ctx.Done()), a oba jsou připraveny, bude volba náhodná.
  • Pokud je připraven pouze jeden z nich, provede se právě on.

Nelze tedy jednoznačně říct, co bude provedeno jako první — záleží na stavu kanálů a kontextu v okamžiku provádění selectu.

Příklad:

select {
case data := <-ch:
    // zpracování dat z kanálu
case <-ctx.Done():
    // zpracování zrušení kontextu
}

Pokud jsou jak ch, tak ctx.Done() připraveny, bude volba náhodná.