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
相关推荐
间彧2 分钟前
Micrometer详解与应用实战
后端
间彧6 分钟前
SpringBoot/SpringCloud,如何实现监控埋点
后端
一缕南风16 分钟前
Spring Boot 响应拦截器(Jackson)实现时间戳自动添加
java·spring boot·后端·拦截器
Homeey22 分钟前
深入理解 synchronized:从硬件原子性到并发架构设计
java·后端
Homeey22 分钟前
云服务器托管Hexo博客全攻略:从选型到部署的实践指南
后端·程序员
间彧26 分钟前
基于@ControllerAdvice和AOP的分层异常处理架构
后端
Badman31 分钟前
Cursor入门提效指南
后端·cursor
武子康42 分钟前
大数据-145 Apache Kudu 架构与实战:RowSet、分区与 Raft 全面解析
大数据·后端·nosql
间彧43 分钟前
Spring @ControllerAdvice详解与应用实战
后端
间彧1 小时前
@ControllerAdvice与AOP切面编程在处理异常时有什么区别和各自的优势?
后端