错误和异常
一、什么是错误:
-
是可能出现问题的地方出现了问题。意料之中的
-
比如:
-
打开文件错误
-
连接数据库错误
-
接口请求错误
二、什么是异常:
-
不应该出现问题的地方出现了问题。意料之外的
-
比如:
-
角标越界
-
引用了空指针(panic: runtime error: invalid memory address or nil pointer dereference)
三、错误和异常的区别:
- 就是error和panic的区别
四、出现异常的两种场景:
-
系统运行中报异常
-
arr := [3]int{1,2,3}
// 这里的index使用运算,避免程序没有运行前检测出错误
index := 2+8
fmt.Println(arr[index])
* 自己手动抛异常,panic
* 使得该错误不会被忽略,因而能够被尽快修复。
* ```
if err != nil {
panic(err)
}
五、避免异常的两种方式:
-
defer中使用recover,使程序"重新复活"。defer:延迟语句,主函数退出后defer后的函数才会执行
-
defer必须事先定义,而不是在异常发生的后面定义,执行顺序与声明顺序相反,相当于Java中的finally )
-
defer func() {
if err := recover(); err != nil {
logs.Error(" 错误 %s\r\n", err)
l.TplName = “success.html”
}
}()
先触发panic函数的执行,然后调用延迟函数
* 以返回错误替代异常
* ```
a := "aaa"
b,err := strconv.ParseInt(a,10,64)