文章目录
一、概述
Go语言并没有像Java那样的try catch finally
的处理机制,而是提供了其特有的错误处理机制。在Go语言中,错误或异常分为error和panic两种,error一般是程序员可预知的,会进行合适的处理,例如检测输入是否合法等。而panic是程序员无法预知的异常,例如空指针或数组越界等。
二、error
Go 提供了两种创建error的方法,分别是:errors.New
fmt.Errorf
package main
import (
"errors"
"fmt"
)
func main() {
res1, err1 := div(1, 1)
fmt.Println(res1, err1)
res2, err2 := div(1, 0)
fmt.Println(res2, err2)
//返回一个error
e := fmt.Errorf("自定义error")
fmt.Println(e)
}
func div(n, m int) (int, error) {
if m == 0 {
return 0, errors.New("0不能作为分母")
}
return m / n, nil
}
运行结果如下
三、panic
一般在没有recover的情况下panic会导致程序崩溃,panic,defer和recover经常同时出现,用于异常处理,下面是panic异常处理的示例。
package main
import "fmt"
func main() {
//注册捕获panic的函数,必须先注册,若在panic之后则无效
defer doPanic()
n := 0
res := 1 / n
fmt.Println(res) //panic 之后的代码不会执行
}
//当捕获到panic时触发此函数
func doPanic() {
err := recover()
if err != nil {
fmt.Println("捕获到panic")
}
}
注意在Go语言中,recover只在defer调用的函数中有效,并且defer要在panic之前先注册,否则不能捕获异常。当panic被捕获到后,被注册的函数将获得程序控制权