当前位置: 首页 > news >正文

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

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

基本含义

panic 会:

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

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

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

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

语法

panic(interface{})

使用场景

panic 通常用于:

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

  2. 程序逻辑错误

  3. 初始化失败

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

示例

1. 自动触发的 panic

func main() {// 数组越界会触发 panicarr := []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

原文链接:go学习笔记:panic是什么含义 - Lucas_coming - 博客园

体验地址:JNPF快速开发平台

http://www.xdnf.cn/news/1240219.html

相关文章:

  • 工作流绑定卡片优化用户体验-练习我要找工作智能体
  • 豆包1.6+PromptPilot实战:构建智能品牌评价情感分类系统的技术探索
  • 基于Spring Cloud Gateway和Resilience4j的微服务容错与流量控制实战经验分享
  • Solidity智能合约开发全攻略
  • 电商系统想撑住大流量?ZKmall开源商城靠微服务 + Spring Boot3 解决单体架构难题
  • 设计模式-创建型-工厂模式
  • 134页PPT华为项目管理之道PPT
  • 期权投资盈利之道书籍推荐
  • Scrapy爬虫集成MongoDB存储
  • 13.Home-面板组件封装
  • 区块链 和 一致性哈希的结合
  • 基于高斯光束干涉的微球体相位成像系统设计与实现
  • JVM学习日记(十六)Day16——性能监控与调优(三)
  • Python实现Word转PDF全攻略:从入门到实战
  • Linux U盘识别问题排查指南
  • Spring Boot + ShardingSphere 分库分表实战
  • 机器学习——决策树(DecisionTree)+ 过采样 + 交叉验证 案例:电信客户流失数据
  • 飞算科技:用自主创新技术,为行业数字化转型按下 “加速键”
  • ICCV2025 Tracking相关paper汇总和解读(19篇)
  • 13015计算机系统原理-速记宝典
  • Web 开发 12
  • 移动前后端全栈项目
  • 小迪安全v2023学习笔记(五十一讲)—— 持续更新中
  • Nexus配置npm私有仓库
  • Java项目:基于SSM框架实现的商铺租赁管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告+任务书+远程部署】
  • LLM大模型开发-SpringAI:ChatClient、Ollama、Advisor
  • io_destroy系统调用及示例
  • 基于 LangChain + 通义千问 + bge-large 中文 Embedding 搭建一个RAG问答示例
  • FastAPI入门:安全性
  • 第12届蓝桥杯Scratch图形化【省赛】初级组 2021年4月24日