当前位置: 首页 > 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.dtcms.com/a/314635.html

相关文章:

  • AI鉴伪技术鉴赏:“看不见”的伪造痕迹如何被AI识破
  • 每日任务day0804:小小勇者成长记之药剂师的小咪
  • Design Compiler:高层次优化与数据通路优化
  • openeuler离线安装软件
  • 段落注入(Passage Injection):让RAG系统在噪声中保持清醒的推理能力
  • 【回眸】香橙派zero2 阿里云机器视觉分拣系统
  • k8s ingress 场景 client_max_body_size不生效
  • C++风格的类型转换四种方法
  • Flutter 对 Windows 不同版本的支持及 flutter_tts 兼容性指南
  • VPS云服务器Linux系统备份策略与灾难恢复方案设计
  • Redis之通用命令与String类型存储
  • SHELL自动化脚本编程2
  • 如何使用EF框架操作Sqlite
  • K 近邻算法(KNN)完整解析:原理 + 数学公式 + 实战
  • 在Windows 11+I7+32GB内存+RTX 3060上部署Stable Diffusion 3.5 Medium详细步骤
  • Django + Vue 项目部署(1panel + openresty)
  • 制造业引入设备管理系统,实现智能资产运维与效率飞跃
  • Node.js(四)之数据库与身份认证
  • Nestjs框架: Node.js 多环境配置策略与 dotenv 与 config 库详解
  • 【计算机网络 | 第2篇】计算机网络概述(下)
  • Go 语言模糊测试 (Fuzz Testing) 深度解析与实践
  • Onnx模型部署到Arm64进行推理
  • MAC-Spring Cloud + Spring Boot + RocketMQ集成
  • 「查漏补缺」ZGC相关内容整理
  • 机器学习(13):逻辑回归
  • 一周学会Matplotlib3 Python 数据可视化-Hello World编写
  • 半同步复制原理
  • 企业级库存穿透技术实现:基于LSTM的实时损耗控制算法在快鹭AI办公系统中的实践
  • Jmeter进行性能并发测试
  • mybatis知识