Recover

概述 #

建议先阅读 defer 小节。

recover 会终止 panic 状态并且返回 panic 的值,函数会从 panic 之前执行到的地方直接返回,不会继续往下执行。

语法规则 #

recover 必须和 defer 配套使用, 如果 recover 在其他地方执行会返回 nil,不会产生任何效果。 defer 必须在 panic 之前声明,否则 panic 会直接终止程序。

例子 #

错误捕获 #

package main

import "fmt"

func main() {
	if r := recover(); r != nil {
		fmt.Printf("捕获到 1 个错误: %v\n", r)
	}

	panic("测试")

	println("程序执行不到这里")
}

// $ go run main.go
// 输出如下 
/**
  panic: 测试
  ...
  ...
  exit status 2
*/

正确捕获 #

package main

import "fmt"

func main() {
	defer func() {
		if r := recover(); r != nil {
			fmt.Printf("捕获到 1 个错误: %v\n", r)
		}
	}()

	panic("测试")

	println("程序执行不到这里")
}

// $ go run main.go
// 输出如下 
/**
  捕获到 1 个错误: 测试
*/

转载申请

本作品采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,商业转载请联系作者获得授权。

© 蛮荆 | 陕公网安备 61011302001681 号 | 陕ICP备2023004378号-1 | Rendered by Hugo