Golang 第五章 9.panic

  • By v2ray节点

  • 2026-03-26 16:56:09

  • 评论

panic 用于 引发运行时错误,通常表示程序遇到不可恢复的严重问题。

类似其他语言的“抛出异常”

通常在程序遇到逻辑错误或不可恢复条件时使用



基本用法

func main() {
    panic("发生严重错误")
}

输出示例:

panic: 发生严重错误

程序会打印堆栈信息

然后退出程序



defer 与 panic

defer 语句 在 panic 发生时仍会执行

func f() {
    defer fmt.Println("defer 执行")
    panic("错误发生")
}

func main() {
    f()
}

输出:

defer 执行
panic: 错误发生

defer 用于清理资源,即使发生 panic



panic 的调用场景

程序逻辑错误

if x < 0 {
    panic("x 不能为负数")
}


不可恢复的情况
内存不足
数据损坏
栈溢出(runtime 会自动 panic)



panic 与 recover(配合使用)

recover 可以 捕获 panic 并恢复程序

必须在 defer 中调用 recover

示例:

func f() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("捕获 panic:", r)
        }
    }()
    panic("发生错误")
}

func main() {
    f()
    fmt.Println("程序继续运行")
}

输出:

捕获 panic: 发生错误
程序继续运行

recover 返回 panic 的值

如果没有 panic,recover 返回 nil



注意事项

panic 通常 不用于普通错误,普通错误应使用返回值 error

recover 只能在 defer 中有效

避免滥用 panic,保持程序稳定

v2ray节点购买