首页 > 其他分享 >Go,你也可以的!-【7.2 panic】

Go,你也可以的!-【7.2 panic】

时间:2024-08-30 10:21:28浏览次数:14  
标签:err 代码 7.2 Go 崩溃 panic lesson20

7.2 panic

panic就是Go语言中的崩溃,崩溃也就是程序不可用,这在实际的业务中基本是最严重的BUG

在大部分语言中,产生崩溃的原因基本是差不多的,大多都是访问了空指针、数组越界、内存溢出等。

基本可以总结为,发生崩溃都是与系统进行了非法的内存或资源操作。

本节代码存放目录为 lesson20

如何发生panic

我们在开发中应该极力避免发生panic,想要知道怎么避免,我们首先需要知道panic是怎么发生。

数组越界是经常遇到的崩溃原因,也就是说数组本身只有3个元素,但是却去访问了第4个元素,这时候访问不到就会出现崩溃。

但是事实上,在Go语言中,是不可能出现数组越界的,当我们在代码中尝试访问越界的元素时,代码将会报错。

这是由于数组是长度固定的,所以编译器是会为我们进行代码检查的。

那么我们就可以想到,切片是长度可变的,那是不是就是会出现呢?答案是肯定的,代码如下所示:

var testSlice = []int{1, 2, 3}
fmt.Println(testSlice[4])

如何定位排查

执行上一段的代码,结果输出如下:

panic: runtime error: index out of range [4] with length 3

goroutine 1 [running]:
main.main()
        /Users/xc/xcWork/YouCanGo/Code/YouCanGoCode/lesson20/lesson20.go:7 +0x1d
exit status 2

我们可以直接看到崩溃信息,通过崩溃信息我们可以快速的知道是什么原因产生的崩溃,如下所示:

panic: runtime error: index out of range [4] with length 3

同时在Go语言中我们也可以快速定位到具体发生panic发生的代码行数,如下所示:

/Users/xc/xcWork/YouCanGo/Code/YouCanGoCode/lesson20/lesson20.go:7 +0x1d

从上面的输出,我们可以快速知道发生崩溃的地方,也就是代码的第7行。

手动panic

Go语言中,如果我们想要让程序主动崩溃,我们可以直接使用panic关键字,如下代码所示:

a := "123t"
num, err := strconv.ParseInt(a, 10, 64)
if err != nil {
	panic(err)
}
fmt.Println(num)

在上面的代码中,在发生错误时,我们直接使用panic(err)进行操作,这样就会导致程序直接崩溃。

这种方法在实际业务也有一些应用场景。

比如说当发生一些安全错误时,我们就将程序主动崩溃。

比如发生错误会导致继续运行而产生更严重的逻辑错误,我们可以进行主动崩溃。

小结

本节我们对panic的发生、排查进行了讲解,总结如下:

  • panic就是Go语言里的崩溃

  • 切片访问越界、空指针等会导致崩溃

  • 通过崩溃堆栈输出可以快速定位崩溃原因及崩溃代码

  • 可以通过panic(err)将程序主动崩溃

书籍地址:https://youcan.golang.website/

书籍代码:https://github.com/YouCanGolang

我的GitHub:https://github.com/swxctx

标签:err,代码,7.2,Go,崩溃,panic,lesson20
From: https://blog.csdn.net/qq_28796345/article/details/141593588

相关文章

  • HTB-Mongod(MongoDb数据库)
    前言各位师傅大家好,我是qmx_07,今天给大家讲解Mongod靶场Mongod渗透过程RustScan介绍:Rustscan是一款用Rust语言开发的高速端口扫描器,它可以在3秒内扫描所有65535个端口,并支持脚本引擎和自适应学习功能,并且可以和nmap进行联动可以简单理解成多线程的nmap扫描器RustSc......
  • (7.15-7.21)发一篇博文赢百元奖品!前10有奖!【已结束】
    近期接到刷量举报,参赛的博主一定要看清楚活动规则,刷量行为一经发现取消活动资质。文章内容特别出彩的,才会酌情考虑是否只去掉刷的文章量。AIGC这个话题,让人既熟悉又陌生!你用过哪些AIGC领域的工具?分享AIGC领域的产品测评使用、底层技术分析、应用案例...让大家一起认识AIGC。围绕AIG......
  • 计算机毕业设计django+vue大学校园生活交流平台【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网的普及,大学生活日益丰富多彩,但同时也面临着信息交流与资源共享的难题。传统的线下公告板、口口相传等方式......
  • 数据迁移新技能,MongoDB轻松同步至ClickHouse
    在当今数据驱动的世界中,企业的成功依赖于对数据的高效管理和精准分析。数据迁移是实现这些目标的关键环节,而选择合适的工具可以让这项工作变得更加轻松和高效。ETLCloud是一款创新的ETL(提取、转换、加载)工具,它提供了简单直观的界面和强大的功能,专门为现代数据集成挑战设计。它不......
  • 数据迁移新技能,MongoDB轻松同步至ClickHouse
    在当今数据驱动的世界中,企业的成功依赖于对数据的高效管理和精准分析。数据迁移是实现这些目标的关键环节,而选择合适的工具可以让这项工作变得更加轻松和高效。ETLCloud是一款创新的ETL(提取、转换、加载)工具,它提供了简单直观的界面和强大的功能,专门为现代数据集成挑战设计。它不......
  • (7.22-7.28)发一篇博文赢百元奖品!前10有奖!【已结束】
    AIGC这个话题,让人既熟悉又陌生!你用过哪些AIGC领域的工具?分享AIGC领域的产品测评使用、底层技术分析、应用案例...让大家一起认识AIGC。围绕AIGC主题创作1篇文章,文章被精选且阅读量排名位于发文当周前10名可以赢取相应礼品。活动时间7月22日——7月28日活动礼品我们准备了几款实体奖......
  • 不改一行代码轻松玩转 Go 应用微服务治理
    作者:赵源筱Go应用微服务治理简介Go语言具有简洁、高效、并发性强等特性,已经被广泛认为是构建微服务的理想选择之一。Go语言作为构建Kubernetes、Docker的主要编程语言,目前不仅在云原生基础组件领域中被广泛使用,也逐渐被越来越多的开发者应用于各类业务场景中,基于微服务架构......
  • arp报文及使用go实现
    一、ARP协议报文格式及ARP表ARP(AddressResolutionProtocal,地址解析协议)是将IP地址解析为以太网的MAC地址(或者称为物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址还是不够的,因为IP数据......
  • 计算机毕业设计django+vue个人博客系统【开题+论文+程序】
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,个人博客作为展示个人思想、分享知识与经验的重要平台,其重要性日益凸显。传统的博客系统多依赖于单一的技术栈,如......
  • ArgoWorkflow教程(三)---使用 Artifacts 实现步骤间文件共享
    上一篇我们分析了Workflow、WorkflowTemplate、template之间的关系。本篇主要分析如何在argo-workflow中使用S3存储artifact实现步骤之间的文件共享。本文主要解决两个问题:1)artifact-repository如何配置2)Workflow中如何使用1.artifact-repository配置ArgoWork......