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