Sobes.tech
Junior — Middle

Koje su razlike između panike i kritične greške koja zaustavlja izvršavanje programa?

sobes.tech АИ

Одговор од АИ

У језику Go, panic је механизам који се активира у случају критичне грешке током извршавања програма, на пример, приступа изван граница среза или јасног позива panic(). panic доводи до тренутног прекида нормалног извршавања тренутне горутине и почиње процес "разгибавања" стека (stack unwinding), позивајући одложене функције (defer). Ако panic не буде ухваћен помоћу recover(), програм ће се завршити грешком.

Критична грешка која зауставља извршавање програма може бити изазвана panic, али такође може бити повезана са фаталним грешкама на нивоу система (нпр., грешка сегментације), које не могу бити обрађене у коду.

Главне разлике:

  • Panic — управљани механизам који се може ухватити и обрадити помоћу recover().
  • Критична грешка — може бити необрађива, што доводи до тренутног завршетка програма без могућности опоравка.

Пример коришћења panic и recover:

func mayPanic() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Опоравак после панике:", r)
        }
    }()
    panic("нешто је пошло по злу")
}

func main() {
    mayPanic()
    fmt.Println("Програм наставља")
}