Back to questions
Junior — Middle
80
Объясните механизм взаимодействия функций panic, defer и recover в языке программирования Go.
Answer from AI
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 ловит её и программа продолжает работу без краха.