Go语言捕获和处理异常

在Go语言中,异常处理机制与其他语言(如Java或Python)有所不同。Go并没有传统意义上的异常机制,而是通过返回值来处理错误。不过,Go语言也提供了 panicrecover 机制来处理运行时错误。本文将介绍这两种机制的使用。

1. 错误处理的基本概念

在Go中,函数通常会返回一个错误类型的值,表示函数执行是否成功。我们可以通过检查返回的错误来决定如何处理。

package mainimport ("errors""fmt"
)func mayFail() error {return errors.New("an error occurred")
}func main() {err := mayFail()if err != nil {fmt.Println("Error:", err)} else {fmt.Println("Success!")}
}

2. 使用 panicrecover

2.1. 什么是 panic

panic 用于引发一个运行时错误,它会导致程序立即停止,并开始逐层回溯。在回溯过程中,所有的defer语句会被执行。

package mainimport "fmt"func riskyFunction() {panic("something went wrong")
}func main() {riskyFunction()fmt.Println("This line will not be executed")
}
2.2. 什么是 recover

recover 是一个内置函数,可以用于捕获 panic 引发的错误,并恢复程序的正常执行。它通常与 defer 一起使用。

package mainimport "fmt"func recoverFromPanic() {if r := recover(); r != nil {fmt.Println("Recovered from:", r)}
}func riskyFunction() {defer recoverFromPanic() // 使用defer确保在panic时调用recoverpanic("something went wrong")
}func main() {riskyFunction()fmt.Println("After recovery, program continues")
}

3. 使用示例

下面是一个完整的示例,展示如何在Go中捕获和处理异常:

package mainimport "fmt"// 捕获异常的函数
func recoverFromPanic() {if r := recover(); r != nil {fmt.Println("Recovered from:", r)}
}// 一个可能导致panic的函数
func riskyFunction() {defer recoverFromPanic() // 确保在panic时调用recoverfmt.Println("Executing risky function")panic("something went wrong")
}func main() {riskyFunction() // 调用可能出错的函数fmt.Println("Program continues after recovery")
}

4. 结论

在Go语言中,错误处理主要通过返回错误值来完成,但也提供了 panicrecover 机制来处理运行时错误。理解这两种机制可以帮助你编写更健壮的Go程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vivo 轩辕文件系统:AI 计算平台存储性能优化实践

在早期阶段,vivo AI 计算平台使用 GlusterFS 作为底层存储基座。随着数据规模的扩大和多种业务场景的接入,开始出现性能、维护等问题。为此,vivo 转而采用了自研的轩辕文件系统,该系统是基于 JuiceFS 开源版本开发的一款分布式文件…

Java | Leetcode Java题解之第520题检测大写字母

题目: 题解: class Solution {public boolean detectCapitalUse(String word) {// 若第 1 个字母为小写,则需额外判断第 2 个字母是否为小写if (word.length() > 2 && Character.isLowerCase(word.charAt(0)) && Charact…

如何封装一个可取消的 HTTP 请求?

前言 你可能会好奇什么样的场景会需要取消 HTTP 请求呢? 确实在实际的项目开发中,可能会很少有这样的需求,但是不代表没有,比如: 假如要实现上述这个公告栏,每点击一个 tab 按钮就会切换展示容器容器中…

图的最短路径算法-迪杰斯特拉(Dijkstra)算法与弗洛伊德(Frolyd)算法(更新中)

一、最短路径算法(Shortest Path) 最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 最短路径不一定是经过边最少的路径,但在这些最短路径中&#x…

JSON文件转YOLO文件示例

文章目录 前言一、步骤指南二、代码实现1.类别名称到ID的映射2.边界框转换函数3.JSON解码函数4.主程序 前言 将JSON标注文件转换为YOLO格式通常涉及从JSON文件中提取图像尺寸、对象类别和边界框坐标,并将这些信息格式化为YOLO格式所需的格式。YOLO格式通常要求每行…

ubuntu编译ffmpeg

配置 运行环境:vmware ubuntu 20.04 时间:2024年10月24日 权限问题:由于ubuntu权限问题 建议使用root权限编译,且~是根据用户组来进行定位的。 环境配置更新 cd ~ && \ mkdir ffmpeg_sources ffmpeg_build bin &…

EasyExcel自定义下拉注解的三种实现方式

文章目录 一、简介二、关键组件1、ExcelSelected注解2、ExcelDynamicSelect接口(仅用于方式二)3、ExcelSelectedResolve类4、SelectedSheetWriteHandler类 三、实际应用总结 一、简介 在使用EasyExcel设置下拉数据时,每次都要创建一个SheetWr…

【vs2022】windows可用的依赖预编译库

ffmpeg 、x264 、x265 等。obs是基于qt6+vs2022+64bit obs的官网传统构建已经不用了obs的s2022构建OBS Deps Build 2024-09-12FFmpeg4.4 库,x64 可用。

每天五分钟深度学习pytoroch:基于pytorch搭建逻辑回归算法模型

本文重点 前面我们学习了线性回归模型的搭建,无论是基于pytorch还是不基于pytorch,以上的模型都是回归模型,本文我们将使用pytorch搭建逻辑回归模型,逻辑回归模型是一个经典的分类问题。 模型搭建 class LogisticRegression(nn.Module) : def __init__(self) :super (Lo…

嵌入式软件 Bug 排查与调试技巧

目录 1、准备工作 2、打印调试 实现步骤 注意事项 3、断点调试 4、观察点调试 5、远程调试 6、内存分析 内存泄漏检测 栈溢出检测 7、异常处理 8、性能分析 9、逻辑分析仪 10、示波器 11、常见bug类型 12、调试策略 1、准备工作 硬件工具准备 调试器:例如 J - …

玩转Docker | 使用Docker部署推箱子网页小游戏

玩转Docker | 使用Docker部署推箱子网页小游戏 一、项目介绍项目简介项目预览 二、系统要求环境要求环境检查Docker版本检查检查操作系统版本 三、部署推箱子网页小游戏下载镜像创建容器检查容器状态检查服务端口安全设置 四、访问推箱子网页小游戏五、总结 一、项目介绍 项目…

什么是服务器?服务器与客户端的关系?本地方访问不了网址与服务器访问不了是什么意思?有何区别

服务器是一种高性能的计算机,它通过网络为其他计算机(称为客户端)提供服务。这些服务可以包括文件存储、打印服务、数据库服务或运行应用程序等。服务器通常具有强大的处理器、大量的内存和大容量的存储空间,以便能够处理多个客户…

Iperius Backup(数据备份软件) v8.3.0 中文免费版

下载: 【1】https://pan.quark.cn/s/19ef716c02d5 【2】https://drive.uc.cn/s/197acba8d8d94?public1 Iperius Backup是一款专业的备份还原软件,功能强大,支持DAT备份、LTO备份、NAS备份、磁带备份、RDX驱动器、USB备份,满足用…

SOES(EtherCAT)从站API梳理

1. void ESC_config (esc_cfg_t * cfg); 功能:配置EtherCAT从站。参数:esc_cfg_t *cfg 指向配置结构体的指针,该结构体包含从站的配置参数。解释:该函数用于初始化或更新从站的配置,如通信参数、同步管理器设置等。 …

Java Lock Condition 总结

前言 相关系列 《Java & Lock & 目录》(持续更新)《Java & Lock & Condition & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Java & Lock & Condition & 总结》(学习总结/最新最准…

K8S测试pod内存和CPU资源不足

只设置requests参数 mysql主从pod启动后监控 读压测之后 同时设置limits和requests,只调低内存值 监控 压力测试 同时设置limits和requests,只调低CPU值 初始状态 开始压测 结论 对于CPU,如果pod中服务使用CPU超过设置的limits&…

谷歌云GCP基础概念讲解

概览 云的基础是虚拟化:服务器,存储,网络。服务器是远程计算机的逻辑分区。存储是物理硬盘的逻辑划分。网络则是虚拟私有云。 谷歌是唯一一个拥有全球私有基础设施的公司;他们的谷歌云基础设施没有任何一部分通过公共互联网。换句…

绿盟科技发布三季度报告,收入略增,亏损收窄,经营性净现金流同比翻倍

10月30日,绿盟科技发布2024年三季度报告。2024年公司前三季度实现营业收入12.74亿元,同比增长5.57%;毛利率59.50%,同比增长4.76个百分点;期间费用总额同比下降7.68%;公司实现归属于上市公司股东的净利润-3.…

【云原生】云原生后端详解:架构与实践

目录 引言一、云原生后端的核心概念1.1 微服务架构1.2 容器化1.3 可编排性1.4 弹性和可伸缩性 二、云原生后端的架构示意图三、云原生后端的最佳实践3.1 使用服务网格3.2 监控与日志管理3.3 CI/CD 流水线3.4 安全性 总结参考资料 引言 随着云计算的迅猛发展,云原生…

Python 爬虫的寻宝大冒险:如何捕获 API 数据的宝藏

在这个信息爆炸的数字时代,数据就像是隐藏在网络深处的宝藏,等待着勇敢的探险家去发现。今天,我们要讲述的是如何成为一名 Python 爬虫探险家,装备你的代码工具,深入 API 的迷宫,捕获那些珍贵的数据宝藏。 …