Sobes.tech
Junior — Middle

Обяснете механизма на взаимодействие между функциите panic, defer и recover в езика за програмиране Go.

sobes.tech AI

Отговор от AI

В Go функциите panic, defer и recover са свързани с обработката на грешки и изключителни ситуации.

  • panic — причинява внезапно завършване на текущата функция и започва процеса на "паника", който се разпространява по стековия трак и извиква отложените функции defer.
  • defer — отлага изпълнението на функция до изхода от текущата функция, позволявайки почистване или обработка след panic.
  • recover — позволява "улов" на panic вътре в отложена функция и предотвратява прекратяването на програмата.

Пример:

func пример() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Възстановен от panic:", r)
        }
    }()

    fmt.Println("Преди panic")
    panic("нещо се обърка")
    fmt.Println("Това няма да се изпълни")
}

Тук panic предизвиква грешка, defer с recover я улавя и програмата продължава да работи без срив.