golang异常处理

2020-08-04  本文已影响0人  代码表演艺术家

go语言没有使用像java python等语言的try catch/except 语句来处理异常,而是使用它特有的panic,recover,defer来捕获和处理异常

package main

import "fmt"

func main() {
    c := divide(1, 0)
    fmt.Println(c)
    fmt.Println("execute completly")
}

func divide(a, b int) int {
    defer func() {
        err := recover()
        if err != nil {
            fmt.Println("error happen!")
            fmt.Println(err)
        } else {
            fmt.Println("all right")
        }
    }() //匿名函数,这里必须要带上()

    if b == 0 {
        panic("divided by zero!!")
    }
    return a / b
}
//输出
error happen!
divided by zero!!
0
execute completly

分析:
divide是一个做除法的函数,可能会出现除数为0的错误,所以在函数一开头就定义了一个defer匿名函数(注意这里的匿名函数定义完后面要带上括号才能执行),这个匿名函数被defer修饰了所以只在divide函数执行完才会执行,而不是一进来就执行。后面判断b是否等于0,如果为零的话我们手动使用panic抛出了异常,这个异常是在divide函数退出前执行的defer匿名函数里通过recover()来捕获的,如果err不为空就说明发生了错误,打印error happen!和panic抛出的divided by zero!! 然后主协程返回到主函数main里,继续执行后面的打印

上一篇 下一篇

猜你喜欢

热点阅读