Junior — Middle
Μπορείτε να πιάσετε και να διαχειριστείτε πανικούς μέσα σε μια κλήση defer στο Go;
sobes.tech AI
Απάντηση από AI
Στη Go, μπορείς να χρησιμοποιήσεις το defer για να διαχειριστείς τις πανικές, αλλά η κλήση του defer από μόνη της δεν πιάνει την πανική· πρέπει να πιαστεί μέσα στη λειτουργία που έχει καθυστερήσει με recover().
Παράδειγμα:
func safeCall() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Πανικός πιάστηκε και διαχειρίστηκε:", r)
}
}()
panic("κάτι πήγε στραβά")
}
Εδώ, το recover() καλείται μέσα στη λειτουργία που έχει καθυστερήσει και επιτρέπει να πιαστεί ο πανικός που προκλήθηκε στο safeCall. Έτσι, οι πανικοί δεν μπορούν να "πιαστούν" άμεσα στο defer, αλλά μπορούν να διαχειριστούν μέσα στη λειτουργία που έχει καθυστερήσει με recover().