写点什么

go 学习笔记:panic 是什么含义

  • 2025-08-04
    福建
  • 本文字数:870 字

    阅读完需:约 3 分钟

anic 是 Go 语言中的一种运行时错误处理机制,用于处理程序中的异常情况。

基本含义

panic 会:

  1. 立即停止当前函数的执行

  2. 开始执行 defer 函数(如果有的话)

  3. 向上传播到调用栈,逐层执行 defer

  4. 如果到达 main 函数,程序会崩溃并退出

语法

panic(interface{})
复制代码

使用场景

panic 通常用于:

  1. 不可恢复的错误(如数组越界、空指针解引用)

  2. 程序逻辑错误

  3. 初始化失败

  4. 手动触发 panic(不推荐)

示例

1. 自动触发的 panic

func main() {    // 数组越界会触发 panic    arr := []int{1, 2, 3}    fmt.Println(arr[10]) // panic: runtime error: index out of range}
复制代码

2. 手动触发 panic

func divide(a, b int) int {    if b == 0 {        panic("除数不能为零")    }    return a / b}
复制代码

3. defer 与 panic

func main() {    defer fmt.Println("程序结束")    defer fmt.Println("清理资源")        panic("发生错误")        fmt.Println("这行不会执行")}// 输出:// 清理资源// 程序结束// panic: 发生错误
复制代码

recover 函数

recover 用于捕获 panic,只能在 defer 函数中使用:

func handlePanic() {    defer func() {        if r := recover(); r != nil {            fmt.Println("捕获到 panic:", r)        }    }()        panic("测试 panic")}
func main() { handlePanic() fmt.Println("程序继续运行")}
复制代码

panic vs log.Fatal

最佳实践

  1. 避免手动使用 panic,除非是真正的不可恢复错误

  2. 使用 error 返回值处理可预期的错误

  3. 在 defer 中使用 recover 来优雅处理 panic

  4. 在 main 函数或 init 函数中使用 panic 处理初始化错误

func main() {    defer func() {        if r := recover(); r != nil {            log.Printf("程序异常退出: %v", r)        }    }()        // 初始化代码    if err := initialize(); err != nil {        panic("初始化失败: " + err.Error())    }        // 正常程序逻辑}
复制代码


文章转载自:Lucas_coming

原文链接:https://www.cnblogs.com/neural-networker/p/19020419

体验地址:http://www.jnpfsoft.com/?from=001YH

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
go学习笔记:panic是什么含义_Go_不在线第一只蜗牛_InfoQ写作社区