Junior — Middle
Milyen különbségek vannak a pánik és a kritikus hiba között, amelyek megállítják a program végrehajtását?
sobes.tech MI
Válasz az MI-től
Go nyelven a panic egy mechanizmus, amely kritikus hiba esetén aktiválódik a program futása közben, például egy szelet (slice) határain kívüli hozzáférés vagy explicit panic() hívás esetén. A panic az aktuális goroutine normál végrehajtását azonnal megszakítja, és elindítja a "stack unwinding" (verem kioldás) folyamatát, ahol a defer-rel jelölt függvények hívódnak meg. Ha a panic nem kerül kezelése recover() segítségével, a program hibával ér véget.
Egy kritikus hiba, ami leállítja a program futását, lehet, hogy panic-ből ered, de lehet rendszer szintű fatális hiba (pl. szegmentációs hiba) is, amit nem lehet a kódban kezelni.
Fő különbségek:
- Panic — egy kontrollált mechanizmus, amit el lehet kapni és kezelni
recover()-rel. - Kritikus hiba — lehet, hogy nem kezelhető, és azonnali programleállást okoz mentési lehetőség nélkül.
Példa a panic és recover használatára:
func mayPanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Visszaállt panic után:", r)
}
}()
panic("valami rosszul sült el")
}
func main() {
mayPanic()
fmt.Println("A program folytatódik")
}