异常处理
error接口
生成一个error接口
1.fmt.Errorf
2.errors包
import (
"errors"
"fmt"
)
func main() {
err1 := fmt.Errorf("%s","this is normal err1")
fmt.Println("err1 = ",err1)
err2 := errors.New("this is normal err2")
fmt.Println("err2 = ",err2)
}
error接口应用
func div(a, b int)(result int, err error){
err = nil
if b == 0 {
err = errors.New("分母不能为0")
}else {
result = a / b
}
return
}
func main() {
result, err := div(10,0)
if err != nil{
fmt.Println("err =",err)
}else{
fmt.Println("result =",result)
}
}
panic
数组越界,空指针 会崩溃导致panic致命错误,之后的程序无法执行
recover
写在defer后面
//在可能报错的函数中
defer func(){
//recover() //1)如果发生错误,不会panic,恢复正常,但是不能显示错误信息
//fmt.Println(recover()) //2)打印错误信息,但是不panic时,打印nil
if err := recover(); err != nil{ //3)产生panic时进行打印
fmt.Println(recover())
}
}() //匿名函数