Go语言之异常处理

一、基本介绍

在Go中不支持传统的try...catch...finally这种处理,在Go中引入了defer、panic、recover处理方式,通过抛出一个panic异常,然后在defer中通过recover捕获这个异常,最后正常处理。

package main
import (
    "fmt"
)

func test() {

    defer func() {
        err := recover() // recover() 内置函数,可以捕获到异常
        if err != nil {
            fmt.Println("err=", err)
        }
    }()

    n1 := 5
    n2 := 0
    res := n1 / n2
    fmt.Println("res=", res)

}

func main() {
    test()
}
/*
err= runtime error: integer divide by zero
*/

 进行错误处理的好处的可以及时预警,通过邮件或者其它的方式来避免一些严重后果的产生。

二、自定义异常处理

Go程序中,也支持自定义异常处理,使用errors.New和panic内置函数。其中:

  • errors.New("错误说明"),返回一个error类型的值,表示一个错误
  • panic内置函数,接受一个interface类型的值(任何值)作为参数。可以接收error类型的变量,输出错误信息,并退出程序
package main
import (
    _"fmt"
    "errors"
)

func cal(number int) (err error) {
    if number != 5 {
        return errors.New("输入错误...")
    } else {
        return nil
    }
}

func test() {
    err := cal(10)
    if err != nil {
        panic(err)
    }

}

func main() {
    test()
}
/*
err= runtime error: integer divide by zero
*/

 

上一篇:使用管理员权限运行批处理


下一篇:听说,99% 的 Go 程序员都被 defer 坑过