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
相关推荐
江上月5139 小时前
django与vue3的对接流程详解(下)
后端·python·django
Cikiss9 小时前
图解 bulkProcessor(调度器 + bulkAsync() + Semaphore)
java·分布式·后端·elasticsearch·搜索引擎
Mintopia9 小时前
Next.js 与 Serverless 架构思维:无状态的优雅与冷启动的温柔
前端·后端·全栈
mudtools9 小时前
.NET驾驭Word之力:基于规则自动生成及排版Word文档
后端·.net
王中阳Go9 小时前
面试官:“聊聊最复杂的项目?”90%的人开口就凉!我面过最牛的回答,就三句话
java·后端·面试
廖广杰9 小时前
java虚拟机-虚拟机栈OOM(StackOverflowError/OutOfMemoryError)
后端
MOON404☾9 小时前
Rust 与 传统语言:现代系统编程的深度对比
开发语言·后端·python·rust
不吃肉的羊9 小时前
log4j2使用
java·后端
王中阳Go9 小时前
为什么很多公司都开始使用Go语言了?为啥这个话题这么炸裂?
java·后端·go
12344529 小时前
【java-String】理解String的不可变性,常量池,复用
后端