博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang之panic,recover,defer
阅读量:5115 次
发布时间:2019-06-13

本文共 1441 字,大约阅读时间需要 4 分钟。

defer,recover:

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

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

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

 

package mainimport (    "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 mainimport (    "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接口类型。

转载于:https://www.cnblogs.com/pyyu/p/8149171.html

你可能感兴趣的文章
如何在maven工程中加载oracle驱动
查看>>
Flask 系列之 SQLAlchemy
查看>>
aboutMe
查看>>
【Debug】IAR在线调试时报错,Warning: Stack pointer is setup to incorrect alignmentStack,芯片使用STM32F103ZET6...
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
python常用函数
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
数据库3
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Yii2 Lesson - 03 Forms in Yii
查看>>
Python IO模型
查看>>
Ugly Windows
查看>>
DataGridView的行的字体颜色变化
查看>>
Java再学习——关于ConcurrentHashMap
查看>>