站竣凰 发表于 2025-8-3 18:50:55

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

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

panic 会:

[*]立即停止当前函数的执行
[*]开始执行 defer 函数(如果有的话)
[*]向上传播到调用栈,逐层执行 defer
[*]如果到达 main 函数,程序会崩溃并退出
语法

panic(interface{})使用场景

panic 通常用于:

[*]不可恢复的错误(如数组越界、空指针解引用)
[*]程序逻辑错误
[*]初始化失败
[*]手动触发 panic(不推荐)
示例

1. 自动触发的 panic

func main() {
    // 数组越界会触发 panic
    arr := []int{1, 2, 3}
    fmt.Println(arr) // 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

特性paniclog.Fatal执行 defer✅ 会执行❌ 不会执行可恢复✅ 可用 recover❌ 不可恢复程序退出会退出会退出错误信息打印堆栈信息只打印错误信息最佳实践


[*]避免手动使用 panic,除非是真正的不可恢复错误
[*]使用 error 返回值处理可预期的错误
[*]在 defer 中使用 recover 来优雅处理 panic
[*]在 main 函数或 init 函数中使用 panic 处理初始化错误
func main() {
    defer func() {
      if r := recover(); r != nil {
            log.Printf("程序异常退出: %v", r)
      }
    }()
   
    // 初始化代码
    if err := initialize(); err != nil {
      panic("初始化失败: " + err.Error())
    }
   
    // 正常程序逻辑
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

伯绮梦 发表于 2025-12-3 22:31:26

感谢发布原创作品,程序园因你更精彩

泡市 发表于 2025-12-15 19:05:49

收藏一下   不知道什么时候能用到

上官泰 发表于 2026-1-16 02:59:06

感谢发布原创作品,程序园因你更精彩

狞嗅 发表于 2026-1-17 23:43:50

东西不错很实用谢谢分享

遏筒煽 发表于 2026-1-18 09:29:31

喜欢鼓捣这些软件,现在用得少,谢谢分享!

翁真如 发表于 2026-1-19 04:52:13

喜欢鼓捣这些软件,现在用得少,谢谢分享!

兜蛇 发表于 2026-1-21 11:49:27

分享、互助 让互联网精神温暖你我

溧久苟 发表于 2026-1-21 12:58:45

这个好,看起来很实用

宗和玉 发表于 2026-1-22 07:38:11

懂技术并乐意极积无私分享的人越来越少。珍惜

更成痒 发表于 2026-1-23 00:07:05

很好很强大我过来先占个楼 待编辑

申屠梓彤 发表于 2026-2-7 08:59:52

分享、互助 让互联网精神温暖你我

客臂渐 发表于 2026-2-8 02:10:57

用心讨论,共获提升!

滤冽 发表于 2026-2-9 06:49:17

感谢,下载保存了

系味 发表于 2026-2-10 05:42:41

感谢分享,下载保存了,貌似很强大

府扔影 发表于 2026-2-10 19:38:46

新版吗?好像是停更了吧。

乳杂丫 发表于 2026-2-11 18:26:21

懂技术并乐意极积无私分享的人越来越少。珍惜

虾氲叱 发表于 2026-2-12 22:40:27

新版吗?好像是停更了吧。

痨砖 发表于 2026-2-16 20:17:11

感谢分享,下载保存了,貌似很强大

兼罔 发表于 2026-3-7 09:54:50

新版吗?好像是停更了吧。
页: [1] 2
查看完整版本: go学习笔记:panic是什么含义