Sobes.tech
Junior — Middle

Mi történik először a kiválasztási utasításban: a csatorna adatainak feldolgozása vagy a jelenlegi kontextusból való olvasás?

sobes.tech MI

Válasz az MI-től

A Go nyelvű select utasításban a végrehajtási sorrend a csatornák és más műveletek készenlétéől függ. Ha több eset egyidejűleg kész, véletlenszerűen választ.

A csatornáról származó adatok feldolgozása és a kontextusból (context) történő olvasás összehasonlításakor:

  • Ha a select-ben van egy eset a csatornából olvasásra és egy másik a kontextusból olvasásra (pl. <-ctx.Done()), és mindkettő kész, a választás véletlenszerű lesz.
  • Ha csak egyikük kész, akkor az fog végrehajtódni.

Ezért nem lehet egyértelműen megmondani, hogy melyik lesz az első — ez a csatornák és a kontextus állapotától függ a végrehajtás pillanatában.

Példa:

select {
case data := <-ch:
    // adatok feldolgozása a csatornából
case <-ctx.Done():
    // a kontextus megszakításának kezelése
}

Ha mindkettő, ch és ctx.Done() is kész, a választás véletlenszerű lesz.