怎么网站建设多少钱,有没有免费资源,怎么在网站上投放广告,打造品牌建设作者#xff1a;秃秃爱健身#xff0c;多平台博客专家#xff0c;某大厂后端开发#xff0c;个人IP起于源码分析文章 #x1f60b;。 源码系列专栏#xff1a;Spring MVC源码系列、Spring Boot源码系列、SpringCloud源码系列#xff08;含#xff1a;Ribbon、Feign秃秃爱健身多平台博客专家某大厂后端开发个人IP起于源码分析文章 。 源码系列专栏Spring MVC源码系列、Spring Boot源码系列、SpringCloud源码系列含Ribbon、Feign、Nacos源码系列、RocketMQ源码系列、Spring Cloud Gateway使用到源码分析系列、分布式事务Seata使用到源码分析系列、JUC源码系列 基础系列专栏30天熟悉GO语言建设中 码文不易如果感觉博主的文章还不错请点赞、收藏 ⭐️支持一下博主哇 联系方式Saint9768加我进技术交流群一起学习进步、freedom✈️ 文章目录 一、前言二、异常处理1Go的异常处理机制1、defer关键字2、recover函数3、defer recover 捕获异常示例 2自定义异常示例 3错误中断程序执行 三、总结 一、前言 Go系列文章 GO开篇手握Java走进Golang的世界2 Go开发环境搭建、Hello World程序运行3 Go编程规约和API包4 Go的变量、常量、运算符5 Go 基本数据类型6 Go 复杂数据类型之指针7 Go流程控制之分支结构if、switch8 Go流程控制之循环结构for range、goto、break、continueGo函数全方位解析 Go专栏传送链接https://blog.csdn.net/saintmm/category_12326997.html
二、异常处理
程序出现错误后会被中断无法继续执行。
package mainimport fmtfunc main() {testErrorHandle()fmt.Println(test函数执行成功)
}func testErrorHandle() {num1 : 10num2 : 0result : num1 / num2fmt.Println(result)
}异常输出如下
我们需要通过错误处理/异常捕获使程序可以继续执行。
1Go的异常处理机制
go追求代码优雅通过defer recover的方式实现异常处理机制进而提高程序健壮性。
1、defer关键字
在golang中程序遇到defer关键字不会立即执行defer后的语句而是将defer后的语句压入一个栈中然后继续执行函数后面的逻辑。在函数执行完毕后从栈中依次取出defer语句执行。
此外defer关键字遵守FILO的特性若多个defer函数在同一函数内执行顺序遵循先进后出原理。即第一个defer函数最后一个被执行。
2、recover函数
recover是Go语言的内置函数用于在发生 panic 后进行恢复当 panic 发生时程序会立即终止并开始执行对应的 recover 代码块。即用于捕获函数错误。 3、defer recover 捕获异常示例
通过recover()函数捕获到了异常然后defer关键字将异常压入一个栈中接着继续执行main()函数后面的逻辑最后执行异常打印出来。
package mainimport fmtfunc main() {testErrorHandle()fmt.Println(test函数执行成功)
}func testErrorHandle() {// 使用defer recover捕获异常并直接调用匿名函数defer func() {// 调用recover内置函数捕获错误如果没有可捕获的错误recover()函数返回零值nilerr : recover()if err ! nil {fmt.Println(错误被捕获error is , err)}}()num1 : 10num2 : 0result : num1 / num2fmt.Println(result)
}异常捕获 2自定义异常
使用需要调用errors包下的New()函数进行自定义异常但是New()函数仅支持自定义一个字符串。
示例
package mainimport (errorsfmt
)func main() {err : customException()if err ! nil {fmt.Println(自定义错误为, err)}fmt.Println(test函数执行成功)
}// 函数的返回类型为error
func customException()(err error) {num1 : 10num2 : 0if num2 0 {// 抛出自定义异常return errors.New(除数不能为0)} else {// 正常执行result : num1 / num2fmt.Println(result)return nil}
}控制台输出
3错误中断程序执行
一些场景我们希望程序出现错误之后后续代码不再执行程序中断并退出。
我们可以使用builtin包下的panic()内置函数中断程序的执行。
示例
当customException()函数返回异常信息之后panic()函数将中断main()函数的执行。
package mainimport (errorsfmt
)func main() {err : customException()if err ! nil {fmt.Println(自定义错误为, err)// 中断程序的执行panic(err)}fmt.Println(test函数执行成功)
}// 函数的返回类型为error
func customException()(err error) {num1 : 10num2 : 0if num2 0 {// 抛出自定义异常return errors.New(除数不能为0)} else {// 正常执行result : num1 / num2fmt.Println(result)return nil}
}控制台输出
三、总结
Go的异常处理分三块通过defer关键字 recover()函数捕获异常、通过errors包下的New()函数自定义异常、通过panic()函数中断程序执行。