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
相关推荐
小江的记录本3 分钟前
【JEECG Boot】 《JEECG Boot 数据字典使用教程》(完整版)
java·前端·数据库·spring boot·后端·spring·mybatis
Moment8 分钟前
AI 全栈时代,为什么推荐 NodeJs 服务端使用 NestJs
前端·javascript·后端
Moment10 分钟前
AI全栈入门指南:什么是 NestJs
前端·javascript·后端
翻斗包菜14 分钟前
零基础入门 Flask 框架
后端·python·flask
_下雨天.16 分钟前
Flask 框架
后端·python·flask
卤炖阑尾炎17 分钟前
Flask 框架实战全解:从入门到精通
后端·python·flask
无籽西瓜a19 分钟前
【西瓜带你学设计模式 | 第十五期 - 策略模式】策略模式 —— 算法封装与动态替换实现、优缺点与适用场景
java·后端·设计模式·软件工程·策略模式
Leinwin19 分钟前
GitHub Copilot CLI现已支持连接本地Ollama/vLLM模型(附配置指南)
后端·python·flask
珍朱(珠)奶茶22 分钟前
Spring Boot3整合FreeMark、itextpdf 5/7 实现pdf文件导出及注意问题
java·spring boot·后端·pdf·itextpdf
星辰_mya32 分钟前
深度全面学习负载均衡Ribbon/Spring Cloud LoadBalancer
后端·spring cloud·面试·负载均衡·架构师