From 008c6ced4d7c60114426d7c01e28e7cb8d955b0a Mon Sep 17 00:00:00 2001 From: glight2000 <173959153@qq.com> Date: Thu, 31 Dec 2015 23:18:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=9014.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eBook/14.6.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eBook/14.6.md b/eBook/14.6.md index 7618cb9..7db7f39 100644 --- a/eBook/14.6.md +++ b/eBook/14.6.md @@ -17,6 +17,10 @@ func safelyDo(work *Work) { do(work) } ``` +上边的代码,如果`do(work)`发生panic,错误会被记录且协程会退出并释放,而其他协程不受影响。 + +因为`recover`总是返回`nil`,除非直接在`defer`修饰的函数中调用,`defer`修饰的代码可以调用那些自身可以使用`panic`和`recover`避免失败的库例程(库函数)。举例,`safelyDo()`中`deffer`修饰的函数可能在调用`recover`之前就调用了一个`logging`函数,`panicking`状态不会影响`logging`代码的运行。因为加入了恢复模式,函数`do`(以及它调用的任何东西)可以通过调用`panic`来摆脱不好的情况。但是恢复是在`panicking`的协程内部的:不能被另外一个协程恢复。更多深入的细节处理可以在[http://www.tideland.biz/SupervisingGoroutines](http://www.tideland.biz/SupervisingGoroutines)(ref.43)找到。 + ## 链接