Обработка паник с использованием recover в Golang

Beginner

This tutorial is from open-source community. Access the source code

Введение

В Golang recover - это встроенная функция, которая может использоваться для восстановления от паники. В этом лабе будет проверяться ваша способность использовать recover для обработки паник.

Восстановление

Функция mayPanic в предоставленном коде будет вызывать панику при вызове. Ваша задача - модифицировать функцию main для восстановления от паники и вывода сообщения об ошибке.

  • Используйте функцию recover для обработки паники в функции mayPanic.
  • Выведите сообщение об ошибке, когда возникает паника.
$ go run recover.go
Recovered. Error:
a problem

Ниже представлен полный код:

// Go позволяет _восстанавливаться_ от паники,
// используя встроенную функцию `recover`. `recover` может
// остановить панику, не прерывая выполнение программы, и
// позволить ей продолжить выполнение вместо этого.

// Пример того, где это может быть полезно: сервер
// не должен завершаться сбоем, если у одного из соединений
// клиента возникает критическая ошибка. Вместо этого сервер
// должен закрыть это соединение и продолжать обслуживать
// других клиентов. На самом деле, именно так по умолчанию
//行事 Go's `net/http` для HTTP-серверов.

package main

import "fmt"

// Эта функция вызывает панику.
func mayPanic() {
	panic("a problem")
}

func main() {
	// `recover` должен вызываться внутри отложенной функции.
	// Когда окружающая функция вызывает панику, отложенная
	// функция будет активирована, и вызов `recover` внутри нее
	// поймает панику.
	defer func() {
		if r := recover(); r!= nil {
			// Возвращаемое значение `recover` - это ошибка,
			// поднимаемая при вызове `panic`.
			fmt.Println("Recovered. Error:\n", r)
		}
	}()

	mayPanic()

	// Этот код не будет выполняться, потому что `mayPanic` вызывает панику.
	// Выполнение `main` останавливается в точке паники и продолжается
	// в отложенной функции.
	fmt.Println("После mayPanic()")
}

Резюме

В этом лабе вы узнали, как использовать функцию recover для обработки паник в Golang. Используя recover, вы можете предотвратить аварийное завершение программы и продолжить выполнение кода.