• golang之panic,recover,defer


    defer,recover:

    运行时恐慌一旦被引发,就会向调用方传播直至程序崩溃。

    recover内建函数用于“拦截”运行时恐慌,可以使当前的程序从恐慌状态中恢复并重新获得流程控制权。

    recover函数被调用后,会返回一个interface{}类型的结果。如果当时的程序正处于运行时恐慌的状态,那么这个结果就是非nil的

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func test() {
        defer func() {
            //defer中使用recover来捕获异常
            //defer在函数执行结束最后,执行该方法
            if err := recover(); err != nil {
                fmt.Println(err)
            }
        }()
        b := 0
        a := 100 / b
        fmt.Println(a)
        return
    }
    
    func main() {
        for {
            test()
            time.Sleep(time.Second)
        }
        var a []int
        a = append(a, 10, 20, 383)
        a = append(a, a...)
        fmt.Println(a)
    
    }

    panic:

    为了报告运行期间的致命错误

    用于停止当前的控制流程并引发一个运行时错误,它可以接受一个任意类型的参数值,参数值类型常常是string或者error

    package main
    
    import (
        "errors"
        "fmt"
        "time"
    )
    
    func initConfig() (err error) {
        return errors.New("init config failed")
    }
    
    func test() {
        //defer func() {
        //    //defer中使用recover来捕获异常
        //    //defer在函数执行结束最后,执行该方法
        //    if err := recover(); err != nil {
        //        fmt.Println(err)
        //    }
        //}()
        err := initConfig()
        if err != nil {
            panic(err)
        }
        return
    }
    
    func main() {
        for {
            test()
            time.Sleep(time.Second)
        }
        var a []int
        a = append(a, 10, 20, 383)
        a = append(a, a...)
        fmt.Println(a)
    
    }

     go运行时系统引发的错误,如

    func main() {
        myIndex := 4
        ia := [3]int{1, 2, 3}
        _ = ia[myIndex]
    }

    panic函数传入一个runtime.Error类型的参数值,runtime.Error是一个接口类型,并且内嵌了Go内置的error接口类型。

  • 相关阅读:
    python中a = a+b与a += b的不同
    python中的全局变量global
    python中星号(*)和双星号(**)的用法
    python循环语句
    python逻辑运算符
    python内置函数 print()
    python 解析迅雷下载链接
    python 正则表达式
    python 读写文件
    python selenium操作cookie
  • 原文地址:https://www.cnblogs.com/pyyu/p/8149171.html
Copyright © 2020-2023  润新知