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
相关推荐
左灯右行的爱情几秒前
缓存并发更新的挑战
jvm·数据库·redis·后端·缓存
brzhang4 分钟前
告别『上线裸奔』!一文带你配齐生产级 Web 应用的 10 大核心组件
前端·后端·架构
shepherd1115 分钟前
Kafka生产环境实战经验深度总结,让你少走弯路
后端·面试·kafka
袋鱼不重18 分钟前
Cursor 最简易上手体验:谷歌浏览器插件开发3s搞定!
前端·后端·cursor
嘻嘻哈哈开森20 分钟前
Agent 系统技术分享
后端
用户40993225021221 分钟前
异步IO与Tortoise-ORM的数据库
后端·ai编程·trae
会有猫26 分钟前
LabelStudio使用阿里云OSS教程
后端
惜鸟26 分钟前
如何从模型返回结构化数据
后端
GZ25331 分钟前
Smart Input Pro使用教程
后端
vocal33 分钟前
谷歌第七版Prompt Engineering—第三部分
人工智能·后端