Golang 中 defer panic recover 简单使用
Golang defer、panic、recover
defer
defer 语句用于延迟执行一个函数调用,直到包含该 defer 语句的函数执行完毕。defer 语句通常用于释放资源、关闭文件、解锁互斥锁等操作。
defer 语句的执行顺序是后进先出,即最后被 defer 的语句最先执行。例如:
func main() {
defer fmt.Println("defer 1")
defer fmt.Println("defer 2")
defer fmt.Println("defer 3")
fmt.Println("main")
}
输出结果为:
main
defer 3
defer 2
defer 1
panic
panic 是 Go 语言中的一个内置函数,用于触发一个运行时错误。当程序执行到 panic 函数时,会立即停止当前函数的执行,并开始执行该函数中所有 defer 语句。然后,程序会沿着调用栈向上传播 panic,直到找到一个 recover 函数来捕获 panic,或者程序终止。
panic 函数通常用于处理不可恢复的错误,例如数组越界、空指针引用等。
recover 是 Go 语言中的一个内置函数,用于捕获 panic。当程序执行到 recover 函数时,会停止 panic 的传播,并返回 panic 的值。如果程序没有 panic,则 recover 函数返回 nil。
recover 函数通常用于处理 panic,例如在 defer 语句中捕获 panic,并执行一些清理操作。例如:
func main() {
defer func() {
if err := recover(); err != nil {
fmt.Println("panic:", err)
} else {
fmt.Println("no panic")
}
}()
panic("something wrong")
}
输出结果为:
panic: something wrong
注:panic 后面的语句都不会在执行包括调用的函数
func main() {
defer func() {
if err := recover(); err != nil {
fmt.Println("main recover", err)
}
}()
c := testPanic(3, 3)
fmt.Println("继续执行", c)
}
func testPanic(a int, b int) (t int) {
if a%b == 0 {
panic("error ---------")
} else {
return a % b
}
}
输出结果为:
main recover error ---------
标签:
Golang
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!