此紧急恢复代码适用于命名的返回值。
func main() {
result, err := foo()
fmt.Println("result:", result)
if err != nil {
fmt.Println("err:", err)
}
}
func foo() (result int, err error) {
defer func() {
if e := recover(); e != nil {
result = -1
err = errors.New(e.(string))
}
}()
bar()
result = 100
err = nil
return
}
func bar() {
panic("panic happened")
}
Run Code Online (Sandbox Code Playgroud)
输出
result: -1
err: panic happened
Run Code Online (Sandbox Code Playgroud)
func main() {
result, err := foo() …Run Code Online (Sandbox Code Playgroud)