zoukankan      html  css  js  c++  java
  • go异常recover()

    defer func() {
            err := recover()
            if err != nil {
                fmt.Println("panic=", err)
            }
        }()

    今天在测试代码的时候一直报错!找了好久也不知道咋回事!

    就一直网络异常

    然后我师傅敲了上面这段代码,检查到了我的数组越界了!

    然后我发现了我的逻辑错误!

    于是乎!复习了一下go语言异常处理

     go异常处理

      首先 go语言不支持传统的try catch finally,所以go引入的处理方式是 defer, panic, recover

      这三个异常的使用场景未:

        go中可以抛出一个panic异常,然后在defer中通过recover捕获这个异常,然后正常处理

      使用defer+recover处理异常请看下面!

    package main
    
    import (
        "fmt"
    
    )
    
    func test(){
        //使用defer +recover 来捕获和异常处理
        defer func(){
            err :=recover()//recover()内置函数,可以捕获到异常
            if err!=nil {
                fmt.Println("err=",err)
                //这里可以将错误信息发送给管理员
                fmt.Println("发送邮件给xxx")
            }
    
        }()
        num1 :=10
        num2 :=0
        res :=num1/num2
        fmt.Println("res=",res)
    }
    func main(){
        //测试
        test()
    }

     错误信息如下:

    E:goprojectgo_testerrortest>go run error1.go
    err= runtime error: integer divide by zero

      自定义错误

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

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

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

    package main
    
    import (
        "errors"
        "fmt"
    
    )
    
    func test(){
        //使用defer +recover 来捕获和异常处理
        defer func(){
            err :=recover()//recover()内置函数,可以捕获到异常
            if err!=nil {
                fmt.Println("err=",err)
                //这里可以将错误信息发送给管理员
                fmt.Println(" 发送邮件给xxx")
            }
    
        }()
        num1 :=10
        num2 :=0
        res :=num1/num2
        fmt.Println("res=",res)
    }
    
    func readConf(name string)(err error){
        if name =="config.ini"{
            //读取。。。
            return nil
        }else{
            //返回一个自定义错误
            return errors.New("读取文件错误")
        }
    }
    
    func test02(){
    
        err :=readConf("config2.ini")
        if err!=nil{
            //如果读取文件发送错误,就输出这个错误,并终止程序
            panic(err)
        }
        fmt.Println("test02()继续执行")
    }
    
    func main(){
        //测试
        //test()
        test02()
        fmt.Println("main()下面的到吗。。。")
    }
  • 相关阅读:
    celery的使用
    DOM操作
    js动画
    列表案例
    背景案例
    背景属性连写
    背景属性
    链接导航案例
    链接伪类
    优先权之权重会叠加
  • 原文地址:https://www.cnblogs.com/gagaAurora/p/13643826.html
Copyright © 2011-2022 走看看