Go за Прикладом: Відновлення

Функція recover (або відновлення) використовується лише в парі з defer, її призначення перехоплювати panic та відновлювати потік виконання програми.

An example of where this can be useful: a server wouldn’t want to crash if one of the client connections exhibits a critical error. Instead, the server would want to close that connection and continue serving other clients. In fact, this is what Go’s net/http does by default for HTTP servers.

package main
import "fmt"

Основна мета цієї функції - викликати паніку.

func mayPanic() {
    panic("Паніка без причини")
}
func main() {

Перехоплення panic‘и та recover відбувається за допомогою відкладеного виклику, який, як ви вже знаєте, відбувається по завершенню виконання функції.

    defer func() {
        if r := recover(); r != nil {

Значення поверненне recover i є помилка з якою програма панікує.

            fmt.Println("Recovered. Error:\n", r)
        }
    }()
    mayPanic()

Цей код незапуститься, оскільки mayPanic панікує. Запуск main зупиняється на моменті panics і відновлюється у відкладеному замиканні.

    fmt.Println("After mayPanic()")
}
$ go run recover.go
Recovered. Error:
  Паніка без причини

Наступний приклад: Рядкові Функції.