Junior — Middle
Cum se implementează o încheiere sigură a unei goroutines atunci când rezultatul așteptat nu a fost primit, folosind construcția switch-case?
sobes.tech AI
Răspuns de la AI
Pentru a încheia în siguranță o goroutine în timp ce așteaptă un rezultat, poți folosi construcția select cu mai multe cazuri, inclusiv un timeout sau un semnal de anulare. În Go, nu există un switch-case direct pentru canale, dar select îndeplinește o funcție similară.
Exemplu cu timeout:
func worker(done chan struct{}) {
select {
case result := <-someChannel:
fmt.Println("Rezultat primit:", result)
case <-time.After(5 * time.Second):
fmt.Println("Timeout atins, încheierea goroutine")
return
case <-done:
fmt.Println("Semanl de încheiere primit")
return
}
}
Aici, goroutine-ul așteaptă date de la someChannel. Dacă datele nu sosesc în 5 secunde, se activează timeout-ul și goroutine-ul se încheie. De asemenea, se poate trimite un semnal prin canalul done pentru a o încheia forțat.
Această abordare previne blocarea goroutine-ului și permite controlul sigur al acesteia.