Ποια είναι τα διαφορές μεταξύ πανικού και κρίσιμου σφάλματος που σταματούν την εκτέλεση του προγράμματος;
sobes.tech AI
Απάντηση από AI
Στη γλώσσα Go, το panic είναι ένας μηχανισμός που ενεργοποιείται σε περίπτωση κρίσιμου σφάλματος κατά την εκτέλεση του προγράμματος, π.χ., πρόσβαση εκτός των ορίων ενός slice ή ρητή κλήση panic(). Το panic οδηγεί σε άμεση διακοπή της κανονικής εκτέλεσης της τρέχουσας goroutine και ξεκινά τη διαδικασία "αποσυμπίεσης" της στοίβας (stack unwinding), καλώντας τις καθυστερημένες συναρτήσεις (defer). Αν το panic δεν αντιμετωπιστεί με recover(), το πρόγραμμα τερματίζει με σφάλμα.
Ένα κρίσιμο σφάλμα που σταματά την εκτέλεση του προγράμματος μπορεί να προκληθεί από panic, αλλά μπορεί επίσης να σχετίζεται με θανατηφόρα σφάλματα σε επίπεδο συστήματος (π.χ., σφάλμα τμηματοποίησης), που δεν μπορούν να αντιμετωπιστούν στον κώδικα.
Βασικές διαφορές:
- Panic — ένας ελεγχόμενος μηχανισμός που μπορεί να πιαστεί και να αντιμετωπιστεί με
recover(). - Κρίσιμο σφάλμα — μπορεί να είναι μη αντιμετωπίσιμο, οδηγώντας σε άμεσο τερματισμό του προγράμματος χωρίς δυνατότητα ανάκτησης.
Παράδειγμα χρήσης panic και recover:
func mayPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Ανάκτηση μετά από panic:", r)
}
}()
panic("κάτι πήγε στραβά")
}
func main() {
mayPanic()
fmt.Println("Το πρόγραμμα συνεχίζεται")
}