Sobes.tech
Junior — Middle

Wat zijn de verschillen tussen paniek en kritieke fout die de uitvoering van het programma stoppen?

sobes.tech AI

Antwoord van AI

In Go is panic een mechanisme dat wordt geactiveerd bij een kritische fout tijdens de uitvoering van het programma, bijvoorbeeld het overschrijden van de grenzen van een slice of expliciet aanroepen van panic(). panic leidt tot het onmiddellijk beëindigen van de normale uitvoering van de huidige goroutine en start het proces van "stack unwinding" (stack afwikkeling), waarbij defer-functies worden aangeroepen. Als een panic niet wordt opgevangen met recover(), eindigt het programma met een fout.

Een kritische fout die de uitvoering van het programma stopt, kan worden veroorzaakt door een panic, maar kan ook verband houden met fatale fouten op systeemniveau (bijvoorbeeld een segmentatiefout), die niet in de code kunnen worden afgehandeld.

Belangrijkste verschillen:

  • Panic — een beheersbaar mechanisme dat kan worden opgevangen en afgehandeld met recover().
  • Kritische fout — kan onafhandelbaar zijn, wat leidt tot onmiddellijke beëindiging van het programma zonder herstelmogelijkheid.

Voorbeeld van gebruik van panic en recover:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Hersteld na panic:", r)
        }
    }()
    panic("er is iets mis gegaan")
}

func main() {
    mayPanic()
    fmt.Println("Het programma gaat door")
}