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

go语言学习-异常处理

1、异常场景

  • 网络故障
  • 硬件故障
  • 组件故障
  • 输入错误
  • 逻辑错误
  • 链路调度错误

2、异常处理方式

# python或者java异常处理
try 可能出现的错误
catch对错误进行处理 
xxx,err := 代码
if err != nil {代码出现错误,需要做处理
}

3、自定义错误

有两种方法:1、通过errors包中的errors.New方法定义。 2、通过fmt.Errorf方法定义错误。

package mainimport ("errors""fmt"
)// 定义一个函数,用来实现除法
func division(i1, i2 float64) (res float64, err error) {fmt.Println("需要计算的数字是:", i1, i2)if i2 == 0 {return 0, errors.New("输入的分母不能为0")} else {res = i1 / i2return res, nil}
}func main() {// go 错误定义为一种类型,err = ccc// 像使用其他类型的变量一样,去处理我们的错误。// go打开一个本地文件。// 1. 打开这个文件 文件不存在  没有权限// 2. 写入内容/读取内容// f, err := ioutil.ReadFile("./text.txt")// if err != nil {// 	// 此时readfile报错,出现了问题// 	fmt.Println("读取文件内容失败:", err.Error())// } else {// 	fmt.Println(string(f))// }// 自定义errerr := errors.New("这是一个自定义错误")fmt.Println(err)err2 := fmt.Errorf("这是一个自定义错误: %s,它是使用fmt生成的", "这是错误内容")fmt.Println("这是一个使用fmt定义的错误:", err2.Error())// varres, err3 := division(2, 0)if err3 != nil {fmt.Println("计算错误:", err3.Error())} else {fmt.Println("计算结果:", res)}
}

4、程序异常终止

4.1 程序终止panic

panic:可以在异常的时候让程序终止执行,退出程序。或者是程序所强依赖的基础组件不可用。
此时程序已经无法继续正常工作,此时可以使用panic抛出异常,并且把程序退出。
切记:panic不能滥用,不能到处使用panic

package mainimport ("errors""fmt""time"
)// 实现数据库的链接
func connectDatabase(address string, port int) (string, error) {// 如果address和port为空if address == "" || port == 0 {return "", errors.New("无法链接数据库")} else {return "数据库链接成功", nil}
}func main() {s, err := connectDatabase("", 0)for {time.Sleep(5 * time.Second)// 模式启动程序if err != nil {// 说明无法链接数据库fmt.Println(err)panic(err) // 就会退出程序} else {// 链接成功fmt.Println(s)// 正常启动程序}}
}

4.2 defer 程序退出收尾处理

defer: 是go语言中的一种延迟调用机制,defer里面的内容可以在函数return之前或者是程序panic之前执行。
一般用于资源回收和数据返回,defer也可以用于异常时的恢复。
defer是可以有多个的,采用先进后出的机制。

package mainimport ("errors""fmt"
)// 实现数据库的链接
func connectDatabase(address string, port int) (string, error) {// 如果address和port为空if address == "" || port == 0 {return "", errors.New("无法链接数据库")} else {return "数据库链接成功", nil}
}// 返回数据给前端
func returnDataToFrontend(msg string) {fmt.Println("返回给前端的数据是:", msg)
}func main() {//比如一些常见的场景// 1. 关闭连接池// 2. 关闭文件句柄// 3. 记录一些异常日志msg := "返回给前端的数据"defer returnDataToFrontend("1")defer returnDataToFrontend("2")defer returnDataToFrontend("3")defer returnDataToFrontend("4")defer returnDataToFrontend(msg) // 不会真正的执行_, err := connectDatabase("", 0)if err != nil {fmt.Println(err)// retpanic(err)}// 返回数据给前端// returnDataToFrontend(msg)
}

5、异常捕获

package mainimport "fmt"func printSliceData(s []string) {// 使用recover进行异常捕获defer func() { // 匿名函数fmt.Println("程序执行失败, 捕获异常")if err := recover(); err != nil {// recover是用来捕获panic的报错的// 尝试恢复,防止程序异常退出fmt.Println("捕获到了一个错误:", err)// 发出一个告警// 记录一条日志// 返回给前端:说传入的值不对}}()fmt.Println("切片的内容:", s)// 打印一下切片的第三个值fmt.Println("切片的第三个值是:", s[2])
}func main() {// recover 异常的捕获和处理//s := []string{"a", "b"}printSliceData(s)}

相关文章:

go语言学习-异常处理

1、异常场景 网络故障硬件故障组件故障输入错误逻辑错误链路调度错误 2、异常处理方式 # python或者java异常处理 try 可能出现的错误 catch对错误进行处理 xxx,err : 代码 if err ! nil {代码出现错误,需要做处理 }3、自定义错误 有两种方法:1、通过…...

如何使用 JavaScript 实现图片上传并转换为 LaTeX 公式

在本教程中,我们将学习如何使用 JavaScript 创建一个上传图片的功能,并将所选图片转换为 LaTeX 公式。我们将使用 FileReader 对象来读取图片并将其转换为 Base64 格式,然后利用 img2latex API 将其转换为 LaTeX 公式。 1. HTML 结构 首先&…...

深刻理解MySQL8游标处理中not found

深刻理解MySQL8游标处理中not found 最近使用MySQL的游标,在fetch循环过程中,程序总是提前退出 ,百思不得其解,经过测试,原来是对于游标处理中not found的定义理解有误,默认是视同Oracle的游标not found定…...

甄知燕千云与SAP、EBS、TC、NS等应用深度集成,智能提单一键畅通,效能一键提升

当今全球化时代下,全球商业环境面临前所未有的机遇和挑战,企业需要持续的业务变革、组织优化来进行降本增效,企业管理软件已成为中小企业、大型企业数字化转型不可或缺的管理工具,企业内管理软件系统也越来越多。 为了适应当前企业…...

第99步 深度学习图像目标检测:SSDlite建模

基于WIN10的64位系统演示 一、写在前面 本期,我们继续学习深度学习图像目标检测系列,SSD(Single Shot MultiBox Detector)模型的后续版本,SSDlite模型。 二、SSDlite简介 SSDLite 是 SSD 模型的一个变种&#xff0c…...

用EasyAVFilter将网络文件或者本地文件推送RTMP出去的时候发现CPU占用好高,用的也是vcodec copy呀,什么原因?

最近同事在用EasyAVFilter集成在EasyDarwin中做视频拉流转推RTMP流的功能的时候,发现怎么做CPU占用都会很高,但是视频没有调用转码,vcodec用的就是copy,这是什么原因呢? 我们用在线的RTSP流就不会出现这种情况&#x…...

Vatee万腾科技的独特力量:Vatee数字时代创新的新视野

在数字化时代的浪潮中,Vatee万腾科技以其独特而强大的创新力量,为整个行业描绘了一幅崭新的视野。这不仅是一场科技创新的冒险,更是对未来数字时代发展方向的领先探索。 Vatee万腾将创新视为数字时代发展的引擎,成为推动行业向前的…...

【JavaSE】基础笔记 - 异常(Exception)

目录 1、异常的概念和体系结构 1.1、异常的概念 1.2、 异常的体系结构 1.3 异常的分类 2、异常的处理 2.1、防御式编程 2.2、异常的抛出 2.3、异常的捕获 2.3.1、异常声明throws 2.3.2、try-catch捕获并处理 3、自定义异常类 1、异常的概念和体系结构 1.1、异常的…...

QTableWidget——编辑单元格

文章目录 前言熟悉QTableWiget,通过实现单元格的合并、拆分、通过编辑界面实现表格内容及属性的配置、实现表格的粘贴复制功能熟悉QTableWiget的属性 一、[单元格的合并、拆分](https://blog.csdn.net/qq_15672897/article/details/134476530?spm1001.2014.3001.55…...

编译QT Mysql库并集成使用

安装MSVC编译器与Windows 10 SDK 打开Visual Studio Installer,如果已经安装过内容了可能是如下页面,点击修改(头一回打开的话不需要这一步): 然后在工作负荷中勾选使用C的桌面开发,它会帮我们勾选好一些…...

利用企业被执行人信息查询API保障商业交易安全

前言 在当今竞争激烈的商业环境中,企业为了保障商业交易的安全性不断寻求新的手段。随着技术的发展,利用企业被执行人信息查询API已经成为了一种强有力的工具,能够帮助企业在商业交易中降低风险,提高合作的信任度。 企业被执行人…...

【深度学习】P1 深度学习基础框架 - 张量 Tensor

深度学习基础框架 张量 Tensor 张量数据操作导入创建张量获取张量信息改变张量张量运算 张量与内存 张量 Pytorch 是一个深度学习框架,用于开发和训练神经网络模型。 而其核心数据结构,则是张量 Tensor,类似于 Numpy 数组,但是可…...

vue2 识别页面参数中的html

在Vue 2中&#xff0c;你可以使用v-html指令来识别页面参数中的HTML内容。v-html指令允许你将HTML代码作为Vue模板的一部分进行渲染。 以下是一个示例&#xff0c;演示了如何在Vue 2中使用v-html指令来识别页面参数中的HTML内容&#xff1a; <template><div v-html&…...

matlab 一些画图法总结(持续更新)

*****************************************画Dmd_L极坐标表示法**************************************** if(~exist(Dmd_L_array)) Dmd_L_array []; end Dmd_L_array [Dmd_L_array; Dmd_L]; thetaangle(Dmd_L_array); rabs(Dmd_L_array); polarplot(theta,r,o); *****…...

MDK AC5和AC6是什么?在KEIL5中添加和选择ARMCC版本

前言 看视频有UP主提到“AC5”“AC6”这样的词&#xff0c;一开始有些不理解&#xff0c;原来他说的是ARMCC版本。 keil自带的是ARMCC5&#xff0c;由于ARMCC5已经停止维护了&#xff0c;很多开发者会选择ARMCC6。 在维护公司“成年往事”项目可能就会遇到新KEIL旧版本编译器…...

杰发科技AC7801——EEP内存分布情况

简介 按照文档进行配置 核心代码如下 /*!* file sweeprom_demo.c** brief This file provides sweeprom demo test function.**//* Includes */ #include <stdlib.h> #include "ac780x_sweeprom.h" #include "ac780x_debugout.h"/* Define …...

【mybatis注解实现条件查询】

文章目录 步骤1: 引入MyBatis依赖步骤2: 创建数据模型步骤3: 创建Mapper接口步骤4: 配置MyBatis步骤5: 执行条件查询 步骤1: 引入MyBatis依赖 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.x.…...

【广州华锐互动】VR线上课件制作软件满足数字化教学需求

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在教学领域的应用逐渐成为趋势。其中&#xff0c;广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段&#xff0c;使得VR教学成为可能&#xff0c;极大地丰…...

MySQL 中 DELETE 语句中可以使用别名么?

某天&#xff0c;正按照业务的要求删除不需要的数据&#xff0c;在执行 DELETE 语句时&#xff0c;竟然出现了报错&#xff01; 作者&#xff1a;林靖华&#xff0c;开源数据库技术爱好者&#xff0c;擅长MySQL和Redis的运维 爱可生开源社区出品&#xff0c;原创内容未经授权不…...

flutter创建不同样式的按钮,背景色,边框,圆角,圆形,大小都可以设置

在ui设计中&#xff0c;可能按钮会有不同的样式需要你来写出来&#xff0c;所以按钮的不同样式&#xff0c;应该是最基础的功能&#xff0c;在这里我们赶紧学起来吧&#xff0c;web端可能展示有问题&#xff0c;需要优化&#xff0c;但是基本样式还是出来了 我是将所有的按钮放…...

类加载器、双亲委派机制是干啥的?一文详解

目录 一.类加载器 1.作用&#xff1a;加载class文件 举例 2.过程详解 代码示例 3.类加载器的种类 ①启动类&#xff08;根&#xff09;加载器(Bootstrap ClassLoader&#xff0c;爷爷) ②扩展类加载器(Extension ClassLoader&#xff0c;爸爸) ③应用程序加载器(Appli…...

5分钟掌握WenQuanYi Micro Hei:轻量级开源中文字体安装完全指南

5分钟掌握WenQuanYi Micro Hei&#xff1a;轻量级开源中文字体安装完全指南 【免费下载链接】fonts-wqy-microhei Debian package for WenQuanYi Micro Hei (mirror of https://anonscm.debian.org/git/pkg-fonts/fonts-wqy-microhei.git) 项目地址: https://gitcode.com/gh_…...

ILSpy BAML到XAML反编译器:WPF逆向工程终极指南

ILSpy BAML到XAML反编译器&#xff1a;WPF逆向工程终极指南 【免费下载链接】ILSpy .NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform! 项目地址: https://gitcode.com/gh_mirrors/il/ILSpy ILSpy作为业界领先的.N…...

如何在5分钟内完成BepInEx插件框架的完整安装指南

如何在5分钟内完成BepInEx插件框架的完整安装指南 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一款功能强大的游戏插件框架&#xff0c;专为Unity Mono、IL2CPP和.NET…...

FanControl终极实战:Windows风扇控制与智能散热管理全解析

FanControl终极实战&#xff1a;Windows风扇控制与智能散热管理全解析 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…...

随机森林在时间序列预测中的实践与应用

1. 随机森林在时间序列预测中的应用概述时间序列预测一直是数据分析领域的重要课题。传统方法如ARIMA虽然有效&#xff0c;但在处理复杂非线性关系时表现有限。随机森林作为一种强大的集成学习算法&#xff0c;近年来在时间序列预测中展现出独特优势。我最初接触这个领域是在20…...

OpenBCI GUI:让脑电信号可视化变得如此简单

OpenBCI GUI&#xff1a;让脑电信号可视化变得如此简单 【免费下载链接】OpenBCI_GUI A cross platform application for the OpenBCI Cyton and Ganglion. Tested on Mac, Windows and Ubuntu/Mint Linux. 项目地址: https://gitcode.com/gh_mirrors/op/OpenBCI_GUI 想…...

机器学习自学者的高效知识管理策略

1. 机器学习自学者的知识管理策略作为一名从业多年的机器学习工程师&#xff0c;我深知这个领域知识更新速度之快令人窒息。每周都有新论文发表&#xff0c;每月都有新框架推出&#xff0c;而各类在线课程和教材更是层出不穷。面对如此海量的学习资源&#xff0c;很多初学者容易…...

题解:洛谷 B2073 求小数的某一位

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来&#xff0c;并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构&#xff0c;旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…...

AMD Ryzen处理器调试神器:SMU Debug Tool 入门到精通指南

AMD Ryzen处理器调试神器&#xff1a;SMU Debug Tool 入门到精通指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:/…...