• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    golang panic 函数用法示例详解

    发布者: 姬7089 | 发布时间: 2025-8-14 06:21| 查看数: 38| 评论数: 0|帖子模式

    在 Go 语言中,
    1. panic
    复制代码
    1. recover
    复制代码
    是用于处理运行时异常的关键字。以下是它们的用法总结和示例:

    1. panic 的作用


    • 触发条件:当程序遇到无法恢复的严重错误时(如不可预料的逻辑错误、依赖项缺失等),
      1. panic
      复制代码
      会终止当前函数的执行,并逐层向上触发
      1. defer
      复制代码
      ,最后若未被
      1. recover
      复制代码
      捕获,程序会崩溃。
    • 适用场景

      • 初始化阶段的关键资源缺失(如配置文件、数据库连接)。
      • 代码逻辑中出现不可恢复的异常(如断言失败)。


    2. 基本用法
    1. package main
    2. import "fmt"
    3. func main() {
    4.     defer func() {
    5.         if r := recover(); r != nil {
    6.             fmt.Println("Recovered from panic:", r)
    7.         }
    8.     }()
    9.     fmt.Println("Start")
    10.     panic("something bad happened") // 触发 panic
    11.     fmt.Println("End") // 不会执行
    12. }
    复制代码
    输出
    1. StartRecovered from panic: something bad happened
    复制代码
    3. recover 的使用规则


    • 必须与
      1. defer
      复制代码
      结合:
      1. recover
      复制代码
      只能在
      1. defer
      复制代码
      函数中生效。
    • 仅在当前 goroutine 有效:无法捕获其他 goroutine 的 panic。
    1. func mayPanic() {
    2.     panic("a problem occurred")
    3. }
    4. func main() {
    5.     defer func() {
    6.         if r := recover(); r != nil {
    7.             fmt.Println("Recovered. Error:", r)
    8.         }
    9.     }()
    10.     mayPanic() // 触发 panic
    11.     fmt.Println("After mayPanic()") // 不会执行
    12. }
    复制代码
    4. 错误处理建议


    • 优先返回
      1. error
      复制代码
      :常规错误应通过多返回值(如
      1. error
      复制代码
      类型)处理。
    • 谨慎使用
      1. panic
      复制代码
      :仅在严重错误或不可恢复场景下使用(如程序启动失败)。
    • 在关键位置
      1. recover
      复制代码
      :例如在 goroutine 的入口或 HTTP 请求处理器中,防止程序崩溃。
    Web 服务器示例
    1. func handleRequest() {
    2.     defer func() {
    3.         if err := recover(); err != nil {
    4.             log.Println("Request failed:", err)
    5.         }
    6.     }()
    7.     // 处理请求逻辑(可能触发 panic)
    8. }
    复制代码
    5. 常见错误场景


    • 未捕获的 panic:若未在
      1. defer
      复制代码
      中调用
      1. recover
      复制代码
      ,程序会崩溃。
    • 跨 goroutine panic:每个 goroutine 需独立处理自己的 panic。

    总结


      1. panic
      复制代码
      :用于终止程序执行并传递错误信息。
      1. recover
      复制代码
      :在
      1. defer
      复制代码
      中捕获 panic,恢复程序流程。
    • 最佳实践:优先使用错误返回值,仅在必要时结合
      1. panic
      复制代码
      1. recover
      复制代码

    通过合理使用这两个关键字,可以提升程序的健壮性,避免因未处理异常导致的崩溃。
    到此这篇关于golang panic 函数用法的文章就介绍到这了,更多相关golang panic 函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表