Как работает связка panic-defer-recover

«Как работает связка panic-defer-recover» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Механизм panic-defer-recover в Go используется для обработки исключительных ситуаций.

  • panic – вызывает аварийное завершение функции, начинает раскручивать стек вызовов.
  • defer – откладывает выполнение функции до завершения окружающей функции (даже при panic).
  • recover – останавливает панику и возвращает переданное в panic значение. Работает только внутри defer.

Пример:

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered:", r)
        }
    }()
    panic("something went wrong")
}

Вывод: Recovered: something went wrong.

Важно: recover работает только в той же горутине, где вызвана panic. Не стоит злоупотреблять этим механизмом – в Go предпочитают явную обработку ошибок через error.