Sobes.tech
Junior — Middle

Čo sa vykoná ako prvé v operátore výberu: spracovanie údajov z kanála alebo čítanie z aktuálneho kontextu?

sobes.tech AI

Odpoveď od AI

V príkaze select v jazyku Go závisí poradie vykonávania od pripravenosti kanálov a iných operácií. Ak je viacero prípadov pripravených súčasne, vyberie sa náhodný.

Čo sa týka porovnania spracovania dát z kanála a čítania z kontextu (context):

  • Ak v selecte existuje prípad na čítanie z kanála a iný na čítanie z kontextu (napríklad, <-ctx.Done()), a obe sú pripravené, voľba bude náhodná.
  • Ak je pripravený len jeden z nich, vykoná sa práve on.

Preto nie je možné jednoznačne povedať, čo bude vykonané ako prvé — záleží na stave kanálov a kontextu v okamihu vykonávania selectu.

Príklad:

select {
case data := <-ch:
    // spracovanie dát z kanála
case <-ctx.Done():
    // spracovanie zrušenia kontextu
}

Ak sú pripravené aj ch, aj ctx.Done(), voľba bude náhodná.