|
|
51CTO旗下网站
|
|
移动端

10.4.3 协程和恢复

《Go语言编程入门与实战技巧》第10章并发编程,本章Go语言里的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为协程(goroutine)时,Go语言会将其视为一个独立的工作单元,这个单元会被调度到可用的逻辑处理器上执行。本节为大家介绍协程和恢复。

作者:黄靖钧来源:电子工业出版社|2018-09-23 09:56

10.4.3  协程和恢复

在下面的代码中,如果do(work)发生panic,错误会被记录且协程会退出并释放,而其他协程不受影响:停掉了服务器内部一个失败的协程而不影响其他协程的工作。

  1. func server(workChan <-chan *Work) {  
  2.     for work :range workChan {  
  3.         go safelyDo(work)   // goroutine开始工作  
  4.     }  
  5. }  
  6.  
  7. func safelyDo(work *Work) {  
  8.     defer func {  
  9.         if err :recover(); err != nil {  
  10.             log.Printf("%s在%v中执行失败", err, work)  
  11.         }  
  12.     }()  
  13.     do(work)  
  14. }  

因为recover总是返回nil,除非直接在defer修饰的函数中调用,defer修饰的代码可以调用那些自身可以使用panic和recover避免失败的库例程(库函数)。

例如,safelyDo()中deffer修饰的函数可能在调用recover之前就调用了一个logging函数,panicking状态不会影响logging代码的运行。

因为加入了恢复模式,函数do(以及它调用的任何对象)可以通过调用panic来摆脱不好的情况。但是恢复是在panic的协程内部的,它不能被另外一个协程恢复。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书会第9群:808517103

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

程序员教程(第2版)

本书按照人事部、信息产业部全国计算机技术与软件专业技术资格(水平)考试程序员考试大纲编写,是对2004版的修订版,内容包括计算机系统、...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊