packagemainimport"fmt"funcmain() { div(1, 0) fmt.Println("--- main执行完毕 ---")}funcdiv(a, b int) int {// 使用defer + recover 处理错误deferfunc() {// 如果该方法返回异常,则一定会走defer语句块,也就是这个闭包,可以在这个闭包中使用recover内置函数获取发生的异常对象if err :=recover(); err !=nil { fmt.Println("出现错误:", err)// 发送错误邮件.... } }()return a / b}
panic抛出自定义错误
packagemainimport ("errors""fmt")funcmain() { div(1, 0) fmt.Println("--- main执行完毕 ---")}funcdiv(a, b int) int {if b ==0 {panic(errors.New("除数不能为0")) }return a / b}
返回错误并交给调用方处理
代码预警,判断参数是否复合标准,否则创建一个自定error并返回
packagemainimport ("errors""fmt")funcmain() { i, err := div(1, 0)if err !=nil { fmt.Println("执行出现错误,程序退出:", err)return } fmt.Println("执行结果:", i)}funcdiv(a, b int) (int, error) {if b ==0 {return0, errors.New("除数不能是0") }return a / b, nil}