Sobes.tech
Junior — Middle

Co jest wykonywane jako pierwsze w instrukcji wyboru: przetwarzanie danych z kanału czy odczyt z bieżącego kontekstu?

sobes.tech AI

Odpowiedź od AI

W instrukcji select w Go kolejność wykonywania zależy od gotowości kanałów i innych operacji. Jeśli kilka przypadków jest gotowych jednocześnie, losowo wybierany jest jeden z nich.

Jeśli chodzi o porównanie obsługi danych z kanału i odczytu z kontekstu (context):

  • Jeśli w select znajduje się przypadek odczytu z kanału i przypadek odczytu z kontekstu (np. <-ctx.Done()), i oba są gotowe, wybór będzie losowy.
  • Jeśli tylko jeden z nich jest gotowy, zostanie wykonany właśnie on.

W związku z tym nie można jednoznacznie powiedzieć, co zostanie wykonane jako pierwsze — to zależy od stanu kanałów i kontekstu w momencie wykonania select.

Przykład:

select {
case data := <-ch:
    // obsługa danych z kanału
case <-ctx.Done():
    // obsługa anulowania kontekstu
}

Jeśli zarówno ch, jak i ctx.Done() są gotowe, wybór będzie losowy.