Go 语言中的错误处理机制

Go 语言中的错误处理机制

一、错误处理机制引出

  1. 在默认情况下,当发生错误后(panic) ,程序就会退出(崩溃.)
  2. 如果我们希望:当发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行。还可以在捕获到错误后,给管理员一个提示(邮件,短信。。。)
  3. 这里引出我们要将的错误处理机制

二、说明

  1. Go 语言追求简洁优雅,所以,Go 语言不支持传统的 try…catch…finally 这种处理。
  2. Go 中引入的处理方式为:****defer****, ****panic****, ****recover****
  3. 这几个异常的使用场景可以这么简单描述:Go 中可以抛出一个 panic 的异常,然后在 defer 中通过 recover 捕获这个异常,然后正常处理

三、使用defer+recover 来处理错误

package main

import (
    "fmt"
    "time"
)

func test(){
    //使用defer + recover来捕获和处理异常
    defer func(){
        err := recover() // recover()是go内置函数,可以捕获到异常
        if err != nil { //err 不为空
            fmt.Println("err=", err)
        }
    }()//匿名函数
    num1 := 10
    num2 := 0
    res := num1/num2 //这句会报错,
    fmt.Println("res=", res)
}

func main(){
    test()
    for i:=0;i<3;i++{
        fmt.Println("main()下面的代码...")
        time.Sleep(time.Second)
    }
}

四、自定义错误

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

  1. errors.New("错误说明") , 会返回一个 error 类型的值,表示一个错误
  2. panic 内置函数 ,接收一个 interface{}类型的值(也就是任何值了)作为参数。可以接收 error 类型的变量,****输出错误信息****,****并退出程序****.
package main

import (
    "errors"
    "fmt"
    "time"
)

//函数去读取以配置文件init.conf的信息
//如果文件名传入不正确, 我们就返回一个自定义的错误
func readConf(name string) (err error) {
    if name == "config.ini" {
        //读取...
        return nil
    } else {
        return errors.New("读取文件错误")
    }
}

func test() {
    err := readConf("config2.ini")
    if err != nil {
        //如果读取文件发生错误,则err不为空(nil),并终止程序
        panic(err)
    }
    fmt.Println("test()继续执行...")
}

func main() {
    test()
    for i := 0; i < 3; i++ {
        fmt.Println("main()下面的代码...")
        time.Sleep(time.Second)
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容