go学习笔记
基础
go 定义变量的几种方式
常量的声明
go基本数据类型
go语言中的流程控制
golang中的数组
切片
golang中的map 详解
golang 函数详解
内置函数 panic/recover
golang time包 以及日志函数
golang中的指针
golang 中的结构体
Golang 结构体 和 json互相转换 序列化 反序列化
Golang 中的 go mod 以及 Golang包 详解
golang 中的接口
golang goroutine channel 实现并发 和 并行
channel
goroutine 互斥锁 读写互斥锁
golang 反射
golang 标准库
io
strconv
工具 + blog
进程 线程 协程
空接口 类型断言
为Go项目编写Makefile
减小 Go 代码编译后的二进制体积
go windows下编译linux可执行文件
本文档使用 MrDoc 发布
-
+
首页
内置函数 panic/recover
![](/media/202208/2022-08-04_165720_8153650.9725371755334599.png) Go 语言中目前(Go1.12) 是没有异常机制,但是使用oanic/recover 模式来处理错误。panic可以在任何地方引发,但recover 只有在 defer 调用的函数中有效。 ``` func fn1() { fmt.Println("fn1 执行") } func fn2() { defer func() { //声明匿名函数 err := recover() //使用recover 接收一个 panic异常 if err != nil { //如果 err 不为空 fmt.Println(err) //打印异常 } }() panic("fn2 的 抛出的一个异常") } func fn3() { fmt.Println("fn3 执行") } func main() { fn1() fn2() fn3() fmt.Println("finish") } /* fn1 执行 fn2 的 抛出的一个异常 fn3 执行 finish */ ``` 日常例子: ``` func fn1(a, b int) { defer func() { err := recover() // recover 接受 pince 抛出的异常 if err != nil { fmt.Println(err) } }() fmt.Println(a / b) } func main() { fn1(1, 0) //runtime error: integer divide by zero } ``` 例子: ``` func readFile(filename string) error { if filename == "main.go" { return nil } else { err := errors.New("读取的文件错误") //如果 filename 不等于 main.go 那就声明一个error 错误对象 return err //返回 err 错误 } } func myfunc() { defer func() { e := recover() //用于 接受 panic 异常 if e != nil { // 如果有异常 fmt.Println(e) // 输出panic 异常 } }() err := readFile("xxxx.go") if err != nil { // 如果 readFile 返回的err 不为空 那就声明一个 panic 异常 panic(err) // 声明一个panic 异常 } else { fmt.Println("读取 文件") } } func main() { myfunc() } ```
admin
2022年8月4日 17:48
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码