Junior — Middle
Πώς υλοποιείτε το ασφαλές τερματισμό μιας goroutine όταν το αναμενόμενο αποτέλεσμα δεν λαμβάνεται, χρησιμοποιώντας τη δομή switch-case;
sobes.tech AI
Απάντηση από AI
Για ασφαλή τερματισμό μιας goroutine ενώ περιμένει ένα αποτέλεσμα, μπορείτε να χρησιμοποιήσετε τη δομή select με πολλαπλές περιπτώσεις, συμπεριλαμβανομένου ενός χρονικού ορίου ή ενός σήματος ακύρωσης. Στη Go, δεν υπάρχει άμεσο switch-case για κανάλια, αλλά το select εκτελεί παρόμοια λειτουργία.
Παράδειγμα με χρονικό όριο:
func worker(done chan struct{}) {
select {
case result := <-someChannel:
fmt.Println("Λήφθηκε αποτέλεσμα:", result)
case <-time.After(5 * time.Second):
fmt.Println("Το χρονικό όριο ξεπέρασε, τερματισμός goroutine")
return
case <-done:
fmt.Println("Λήφθηκε σήμα τερματισμού")
return
}
}
Εδώ, η goroutine περιμένει δεδομένα από το someChannel. Αν τα δεδομένα δεν φτάσουν σε 5 δευτερόλεπτα, ενεργοποιείται το χρονικό όριο και η goroutine τερματίζει. Μπορεί επίσης να σταλεί σήμα μέσω του καναλιού done για να τερματίσει βίαια.
Αυτή η προσέγγιση αποτρέπει το μπλοκάρισμα της goroutine και επιτρέπει τον ασφαλή έλεγχό της.