培训首页  >  web前端新闻  >  Go语言panic和恢复recover

Go语言panic和恢复recover

[2018-08-23 15:49:23] 浏览量:118 来源:

北京兄弟连IT

  2018年时已过半,在今年的区块链热潮中,国内各家科技巨头均已粉墨登场,开始在这个新兴领域里高地。但在具体布局细节上,几大巨头又各有不同,从中亦可窥见它们各自对区块链的重视程度和期许方向。

 

  兄弟连Go语言全栈与区块链技术培训课程是由清华、微软和谷歌历时半年时间研发出的无二的体系化课程。课程涵盖9大学习阶段,及多个企业级项目实战和来自世界区块链比赛作品,并由以微软区块链具价值尹成为代表的清华系区块链团队亲临授课,综合提员的职场竞争力。

 

Go语言不支持传统的 trycatchfinally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,才使用Go中引入的Exception处理:defer, panic, recover

 

panic

1、内建函数

2、假如函数F中书写了panic语句,会终止其后要执行的代码,在panic所在函数F内如果存在要执行的defer函数列表,按照defer的逆序执行

3、返回函数F的调用者G,在G中,调用函数F语句之后的代码不会执行,假如函数G中存在要执行的defer函数列表,按照defer的逆序执行,这里的defer 有点类似 try-catch-finally 中的 finally

4、直到goroutine整个退出,并报告错误

 

recover

1、内建函数

2、用来控制一个goroutinepanicking行为,捕获panic,从而影响应用的行为

3、一般的调用建议

a). defer函数中,通过recever来终止一个gojroutinepanicking过程,从而恢复正常代码的执行

b). 可以获取通过panic传递的error

 

简单来讲:go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。

 

示例代码 main函数相当于调用者Gf函数相当于函数F

 

func main() {

      fmt.Println("c")

   defer func() { // 必须要先声明defer,否则不能捕获到panic异常

      fmt.Println("d")

      if err := recover(); err != nil {

         fmt.Println(err) // 这里的err其实就是panic传入的内容

      }

      fmt.Println("e")

   }()

   f() //开始调用f

   fmt.Println("f") //这里开始下面代码不会再执行

}

 

func f() {

   fmt.Println("a")

   panic("异常信息")

   fmt.Println("b") //这里开始下面代码不会再执行

}

-------output-------

c

a

d

异常信息

e

高能预警,兄弟连教育区块链直播课程8月持续火爆来袭!

原价1188元的12节区块链进阶课程,现仅需1元!

还可取《Go语言基础实战项目开发》与《Go语言实战项目开发》教材两本!!

限量!!先到先得!!

http://www.ydma.cn/open/course/24

 

关注兄弟连区块链技术公众号领取更多技术干货哦!!!

 


文中图片素材来源网络,如有侵权请联系删除
  • 软件开发
  • 软件测试
  • 数据库
  • Web前端
  • 大数据
  • 人工智能
  • 零基础
  • 有HTML基础
  • 有PHP基础
  • 有C语言基础
  • 有JAVA基础
  • 其他计算机语言基础
  • 周末班
  • 全日制白班
  • 随到随学

网上报名

热门信息