В Го имаме възможност да възстановим програмата след
като е изпаднала в ужас като ползваме вградената
функция recover (възстановявам (се))1. Извикването на
recover може да спре действието на panic – спиране
на програмата – и така да продължим изпълнението ѝ.
Ето пример как това може да ни бъде от полза: един
сървър не би спрял ако някоя от връзките с клиенти
прекъсне с критична грешка. Вместо това сървърът ще
затвори връзката и ще продължи да обслужва други
клиентски програми. Всъщност това и прави пакетът
net/http, предназна`ен за създаване на уеб сървъри.
import "fmt"
Тази функция ужасява програмата.
func можеДаУжаси() {
panic(struct{ a int }{a: 2})
}
recover трябва да се извика в отложена функция.
Когато обгръщащата я функция се ужаси defer ще се
задейства а извиканата в нея recover ще прехване
ужаса.
func main() {
Стойността, която recover връща е
каквото е подадено на panic.
defer func() {
if r := recover(); r != nil {
fmt.Printf("Възстановено. Грешка: [%v]\n", r)
}
}()
можеДаУжаси()
Този код няма да се изпълни, защото mayPanic
ужасява. Изпълнението на main спира в точката на
на извикване на panic и продължава в отложеното
затваряне.
fmt.Println("След можеДаУжаси()")
}
$ go run recover.go
Възстановено. Грешка: [{2}]
Следващ пример: Функции за работа с низове.