Sobes.tech
Junior — Middle

Kādi ir atšķirības starp paniku un kritisku kļūdu, kas apstādinās programmas izpildi?

sobes.tech AI

Atbilde no AI

Go valodā panic ir mehānisms, kas aktivizējas kritiskas kļūdas gadījumā programmas izpildes laikā, piemēram, ja tiek pārkāertas sēklu (slice) robežas vai tieši izsaukts panic(). panic nekavējoties pārtrauc pašreizējās gorutīnas normālo izpildi un sāk "steka izpakošanas" (stack unwinding) procesu, kurā tiek izsauktas defer funkcijas. Ja panic netiek apstrādāts ar recover(), programma beigsies ar kļūdu.

Kritiska kļūda, kas aptur programmas izpildi, var rasties no panic, bet tā var būt arī saistīta ar sistēmas līmeņa fatālām kļūdām (piemēram, segmentācijas kļūda), kuras kodā nevar apstrādāt.

Galvenās atšķirības:

  • Panic — kontrolēts mehānisms, kuru var noķert un apstrādāt ar recover().
  • Kritiska kļūda — var būt neapstrādājama, novest pie tūlītējas programmas beigas bez iespējas atgūties.

Piemērs, kā izmantot panic un recover:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Atgūts pēc panikas:", r)
        }
    }()
    panic("kaut kas nogāja greizi")
}

func main() {
    mayPanic()
    fmt.Println("Programma turpinās")
}