目录


//错误处理
package main
import("fmt")
func test() {
    num1 := 10
    num2 := 0
    res :=num1/num2//程序存在问题,运行后崩溃
    fmt.Println("res=",res)
}
func main() {
    test()
    fmt.Println("main()下面的代码")
}
  1. 在默认情况下,当发生错误后(panic) ,程序就会退出(崩溃.)

  2. 如果我们希望:当发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行。还可以在捕获到错误后,给出一个提示

使用defer+recover 来处理错误

package main
import(
    "fmt"
    "time"
)
func test() {
    defer func ()  {
        err := recover()//内置函数,可以捕获到异常
        if err != nil{//捕获到错误
            fmt.Println("err=",err)
        }
    }()
    num1 := 10
    num2 := 0
    res :=num1/num2//程序存在问题,运行后崩溃
    fmt.Println("res=",res)
}
func main() {
    test()
    for{
        fmt.Println("main()下面的代码")
        time.Sleep(time.Second) 
    }
}//CTRL+C强制终止程序

错误处理的好处

进行错误处理后,程序不会轻易崩溃,如果加入预警代码,就可以让程序更加地具有鲁棒性。

package main
import(
    "fmt"
    "time"
)
func test() {
    defer func ()  {
        err := recover()
        if err != nil{
            fmt.Println("err=",err)
            fmt.Println("请联系2963703604@qq.com反馈")
        }
    }()
    num1 := 10
    num2 := 0
    res :=num1/num2//程序存在问题,运行后崩溃
    fmt.Println("res=",res)
}
func main() {
    test()
    for{
        fmt.Println("出现错误...请按下CTRL+C终止程序!")
        time.Sleep(time.Second) 
    }
}

自定义错误

Go 程序中,也支持自定义错误, 使用 errors.New 和 panic 内置函数。

  1. errors.New("错误说明") , 会返回一个 error 类型的值,表示一个错误

  2. panic 内置函数 ,接收一个 interface{}类型的值(也就是任何值了)作为参数。可以接收 error 类型的变量,输出错误信息并退出程序.

package main
import(
    "fmt"
    "errors"
)
func readConf(name string) (err error) {
    if name == "config.ini"{
        //读取..
        return nil
    }else{
        //返回一个自定义错误
        return errors.New("读取文件错误..")
    }
}
func test2()  {
    err := readConf("config2,ini")
    if err != nil{
        //如果读取文件发送错误,就输出这个错误并终止程序
        panic(err)
    }
    fmt.Println("test2()继续执行...")
}
func main() {
    test2()
    fmt.Println("出错啦!")
}