Sobes.tech
Назад к вопросам
Junior — Middle
78

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

Ответ от нейросети

sobes.tech AI

В Go функции panic, defer и recover связаны с обработкой ошибок и исключительных ситуаций.

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

Пример:

func example() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered from panic:", r)
        }
    }()

    fmt.Println("Before panic")
    panic("something went wrong")
    fmt.Println("This will not run")
}

Здесь panic вызывает ошибку, defer с recover ловит её и программа продолжает работу без краха.