Sobes.tech
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().