搭理彩票网站开发,青岛企业自助建站系统,平面设计培训什么,南宁做网站找哪家公司【GO语言卵细胞级别教程】07.捕获异常和自定义错误 #x1f970;博主#xff1a;GokuCode #x1f970;微信公众号#xff1a;【给点知识】分享小知识#xff0c;快速成长,欢迎关注呀#xff01;#xff08;底部点击二维码#xff09; #x1f970;本项目演示代码仓库…【GO语言卵细胞级别教程】07.捕获异常和自定义错误 博主GokuCode 微信公众号【给点知识】分享小知识快速成长,欢迎关注呀底部点击二维码 本项目演示代码仓库https://gitee.com/gdzsfun/csdn-study-go 演示项目仓库 本项目创建方式【GO语言卵细胞级别教程】05.项目创建和函数讲解 学习宗旨活到老学到老。 写作宗旨致力于改变现有文章难读难懂问题。 目录 1简介2 详细介绍3 deferrecover异常捕获 4.自定义错误4.1 介绍 1简介
程序中出现异常的时候可以进行不报错处理继续执行程序
2 详细介绍
场景我们写程序的时候难免会出现异常情况比如如下的程序出现了分母为0的情况这个时候使用除法的时候会造成异常情况。
package mystudy
// 错误处理
import (fmt
)
func DemoErrorDetail()(result int){fmt.Println(------错误处理------)num1 : 12num2 : 0result num1 / num2fmt.Println(result)return result
}异常程序会出现异常报错如下信息:panic代表恐慌的意思也就是go语言中的异常
panic: runtime error: integer divide by zero
goroutine 1 [running]:com.gdzs/goproject/src/com/gdzs/mystudy.DemoErrorDetail() D:/07.go/02.gostudy/goproject/src/com/gdzs/mystudy/08.错误处理.go:11 0x51
main.main() D:/07.go/02.gostudy/goproject/src/com/gdzs/main/main.go:59 0x51
*/为了让程序不出现报错那么我们需要处理下异常就是让程序能够捕获异常就像python程序一样
def test():try:print(python捕获异常, 100 / 0 )return Trueexcept Exception as e:return False那么go的异常处理是怎么做的呢
3 deferrecover异常捕获
go语言中使用defer recover函数实现异常的捕获从而保证程序正常运行呢 使用defer recover函数实现 func recover() interface{} 内建函数recover允许程序管理恐慌过程中的Go程序。在defer的函数中执行recover调用会取回传至panic调用的错误值恢复正常执行停止恐慌过程。若recover在defer的函数之外被调用它将不会停止恐慌过程序列。在此情况下或当该Go程不在恐慌过程中时或提供给panic的实参为nil时recover就会返回nil。
package mystudy
// 错误处理
import fmt
func DemoErrorDetail(){// 捕获异常错误defer func(){if err : recover(); err ! nil {fmt.Println(捕获到异常代码)fmt.Println(err:, err)}else{fmt.Println(代码正常执行)}}()fmt.Println(------错误处理------)num1 : 12num2 : 0result : num1 / num2fmt.Println(result)
}// 输出结果
------错误处理------
捕获到异常代码
err: runtime error: integer divide by zero如果想要在执行过程中如果报错则返回默认值如何设置.这里需要使用指定的返回值。
首先指定返回值 result, err需要设置默认值的变量在deferrecover中进行设置即可
package mystudy
// 错误处理
import (fmt
)
func DemoErrorDetail2() (result int, err error){// 捕获异常错误defer func(){if err : recover(); err ! nil {fmt.Println(捕获到异常代码)fmt.Println(err:, err)// 这里设置默认值是99result 99}else{fmt.Println(代码正常执行)}}()fmt.Println(------错误处理------)num1 : 12num2 : 0result num1 / num2fmt.Println(result)return result, nil
}
// 输出结果
------错误处理------
捕获到异常代码
err: runtime error: integer divide by zero
result 99 err nil4.自定义错误
4.1 介绍
对于一些错误我想自定义打印一些自己想执行的内容
使用error类型errors.New(“自定义错误内容”)
func SelfError()(int, error){fmt.Println(------自定义错误------)var num int 1if num 1{return 0, errors.New(num不能为1)}else{fmt.Println(num, num)return num, nil}
}
// 调用函数
result, err : SelfError()
// 输出结果
------自定义错误------
0 num不能为1在实际开发中可能有种情况是如果某个程序报错了就会影响接下来的运行所有不继续执行程序那么就可以使用panic
func SelfError()(int, error){fmt.Println(------自定义错误------)var num int 1if num 1{return 0, errors.New(num不能为1)}else{fmt.Println(num, num)return num, nil}
}// 输出结果
------自定义错误------
0 num不能为1
程序有报错了
panic: num不能为1goroutine 1 [running]:
main.main()D:/07.go/02.gostudy/goproject/src/com/gdzs/main/main.go:67 0x12e
exit status 2