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 ---------
posted @   影的记忆  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示