Sobes.tech
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 και επιτρέπει τον ασφαλή έλεγχό της.