go语言panic异常及recover拦截恢复初级

Go语言为我们提供了专用于“拦截”运行时panic的内建函数——recover。它可以是当前的程序从运行时panic的状态中恢复并重新获得流程控制权。下面我们来看一下具体该怎么用

package main 
import "fmt"
func main()  {
    var a int =10
    //故意让10除以0
    var b int
    //recover应当放在可能出现的错误之前
    //通俗理解为宜未雨绸缪,不可亡羊补牢
    defer func() {
    //放在匿名函数里,err捕获到错误信息,并且输出
        err:=recover()
        if err!=nil {
            fmt.Println(err)
        }
    }()
    c:=a/b
    fmt.Println(c)
}

以上可能大家还不能完全理解,下面再来一个稍微复杂一点点的例子

package main

import "fmt"

func test(i int)  {
    var arr [10]int
    //defer会延迟函数的执行,虽然立即调用了匿名函数,但是该匿名函数
    //不会执行,等整个main函数结束之前在去调用执行匿名函数
    defer func(){
        err:=recover()
        //nil为空的意思,如果不为空,贼表明捕获到了错误信息
        if err!=nil {
            fmt.Println(err)
        }
    }()
    arr[i]=123
    fmt.Println(arr)
}
//主函数开始调用,故意越界,但是程序并没报错,而是打印出了错误信息
func main() {
    test(10)
}
****以上则为recover最基础的用法****
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值