Что такое recovery в Go

«Что такое recovery в Go» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Recovery в Go — это механизм восстановления после паники (panic) в горутине. Используется внутри defer с функцией recover(), которая возвращает значение, переданное в panic(). Если recover() вызван вне defer или нет активной паники, он вернет nil.

Пример:

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

Важно:

  • recover() работает только в той же горутине, где была паника.
  • Не злоупотребляйте recovery — паники предназначены для критических ошибок, а не для обычного управления потоком.
  • После recovery программа продолжает работу с места, где был defer.