您的位置:首页 > 编程语言 > Go语言

golang中recover和panic用法

2014-12-16 21:03 465 查看
golang中没有try... catch...,所以当golang中遇到panic时,如果不进行recover,便会导致整个程序挂掉,具体例子如下:

package main

import (
"fmt"
)

func main() {
panic("fault")
fmt.Println("panic")
}
运行结果:
panic: fault
 
  goroutine 16 [running]:...
程序挂掉,并且报告出错的地方,并打印出掉用的栈

解决办理:利用defer延迟处理的recover进行恢复,具体例子如下:

package main

import (
    "fmt"
)

func main() {
    defer func() {
        fmt.Println("1")
    }()
    defer func() {
        if err := recover(); err != nil {
            fmt.Println(err)
        }
    }()
    panic("fault")
    fmt.Println("2")
}

运行结果:
  fault
  1
 <span style="color:#FF0000;">
</span>
程序首先运行panic,出现故障,此时跳转到包含recover()的defer函数执行,recover捕获panic,此时panic就不继续传递.但是recover之后,程序并不会返回到panic那个点继续执行以后的动作,而是在recover这个点继续执行以后的动作,即执行上面的defer函数,输出1.

注意:利用recover处理panic指令,必须利用defer在panic之前声明,否则当panic时,recover无法捕获到panic,无法防止panic扩散.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: