Go recover函数

  • 在`defer`中调用了内置函数`recover`,`recover`会使程序从 `panic`中恢复,并返回`panic value`
  • 导致`panic`异常的函数不会继续运行,但能正常返回
  • 在未发生`panic`时调用`recover`,`recover`会返回`nil`

示例1

func main() {
	defer func() {
		if err := recover(); err != nil {
			log.Println("defer--->", err)
		}
	}()

	panic("提前终止程序!")
	log.Println("结束了!") // 代码不执行
}

示例2

func fn1() {
	defer func() {
		if err := recover(); err != nil {
			log.Println("defer--->", err)
		}
	}()

	panic("fn1函数报错了")
}

func fn2() {
	log.Println("这里是fn2函数")
}

func main() {
	for i := 0; i < 3; i++ {
		fn1()   // 当fn1函数报错时,recover恢复报错,程序继续向下执行
		fn2()
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_40123451/article/details/120761095