go recover

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Calling first function")
	firstFunction()

	fmt.Println("Calling second function")
	secondFunction()

	fmt.Println("End of main")
}

func firstFunction() {
	defer func() {
		recover()
	}()
	fmt.Println("In first function")
	secondFunction()
}

func secondFunction() {
	fmt.Println("In second function")
	panic("panic in secondFunction")
}

在second中发生panic,second中没有defer,故立即退出,panic沿着调用栈传递到first中,first因为调用的second函数发生panic,也应该退出,但是由于first中有recover,故执行defer的recover,捕获了这个panic,使得它不会再沿着调用栈传到main中。因此,first函数退出后,main函数得以继续往下执行,所以会输出“Calling second function"。但是main随后调用second,又发生panic,panic沿着调用栈传递到main中,导致main退出,不会输出”End of main“

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 00:08:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 00:08:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 00:08:02       58 阅读
  4. Python语言-面向对象

    2024-07-18 00:08:02       69 阅读

热门阅读

  1. docker从0到1 部署gitlab 纯干货

    2024-07-18 00:08:02       22 阅读
  2. C# —— var

    2024-07-18 00:08:02       23 阅读
  3. 【VUE】10、VUE项目中多环境管理使用

    2024-07-18 00:08:02       23 阅读
  4. React学习记录 ---第六章

    2024-07-18 00:08:02       20 阅读
  5. python 读取 hdfs 数据

    2024-07-18 00:08:02       20 阅读
  6. 营销策划方案模板

    2024-07-18 00:08:02       21 阅读
  7. C#模式匹配 关系模式,多个输入

    2024-07-18 00:08:02       21 阅读
  8. NumPy中np.clip()的用法

    2024-07-18 00:08:02       21 阅读
  9. geojson的数据格式是什么

    2024-07-18 00:08:02       18 阅读