加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang中recover和panic用法

发布时间:2020-12-16 19:25:50 所属栏目:大数据 来源:网络整理
导读:golang中没有try... catch...,所以当golang中遇到panic时,如果不进行recover,便会导致整个程序挂掉,具体例子如下: package mainimport ("fmt")func main() {panic("fault")fmt.Println("panic")}运行结果:panic: fault goroutine 16 [running]:... 程

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

程序首先运行panic,出现故障,此时跳转到包含recover()的defer函数执行,recover捕获panic,此时panic就不继续传递.但是recover之后,程序并不会返回到panic那个点继续执行以后的动作,而是在recover这个点继续执行以后的动作,即执行上面的defer函数,输出1.

注意:利用recover处理panic指令,必须利用defer在panic之前声明,否则当panic时,recover无法捕获到panic,无法防止panic扩散.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读