go recover

recover是Go语言的内建函数,它用于从panic中恢复,阻止panic继续传播,并返回触发panic的值。如果在非延迟函数或者没有发生panic的情况下调用recover,它将不会有任何效果,即返回nil。

通常,recover需要与defer和panic一起使用。当panic被触发后,defer会保证recover总是被最后调用。如果recover成功地恢复了panic,程序会从触发panic的函数中返回,继续执行其他代码。

Go 复制代码
package main

import "fmt"

func f() {
	defer func() {
		if r := recover(); r != nil {
			fmt.Println("Recovered in f", r)
		}
	}()
	fmt.Println("Calling g.")
	g(0)
	fmt.Println("Returned normally from g.")
}

func g(i int) {
	if i > 3 {
		fmt.Println("Panicking!")
		panic(fmt.Sprintf("%v", i))
	}
	defer fmt.Println("Defer in g", i)
	fmt.Println("Printing in g", i)
	g(i + 1)
}

func main() {
	f()
}

输出:
Calling g.
Printing in g 0
Printing in g 1
Printing in g 2
Printing in g 3
Panicking!
Defer in g 3
Defer in g 2
Defer in g 1
Defer in g 0
Recovered in f 4
相关推荐
小码哥_常6 小时前
Spring Boot:别再重复造轮子,这些内置功能香麻了
后端
皮皮林5516 小时前
OpenFeign 首次调用卡 3 秒?八年老开发扒透 5 个坑,实战优化到 100ms!
后端
千寻girling7 小时前
《 Git 详细教程 》
前端·后端·面试
0xDevNull9 小时前
Linux 中 Nginx 代理 Redis 的详细教程
redis·后端
GetcharZp9 小时前
告别 Nginx 手动配置!这款 Go 语言开发的云原生网关,才是容器化时代的真香神器!
后端
RuoyiOffice9 小时前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
spring boot·后端·vue·anti-design-vue·ruoyioffice·假期·人力
Vane110 小时前
从零开发一个AI插件,经历了什么?
人工智能·后端
9523610 小时前
SpringBoot统一功能处理
java·spring boot·后端
rleS IONS10 小时前
SpringBoot中自定义Starter
java·spring boot·后端
DevilSeagull11 小时前
MySQL(2) 客户端工具和建库
开发语言·数据库·后端·mysql·服务