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.