|
|
@@ -1,5 +1,23 @@
|
|
|
# 14.6 协程和recover
|
|
|
|
|
|
+一个用到`recover`的程序(参见章节13.3)停掉了服务器内部一个失败的协程而不影响其他协程的工作。
|
|
|
+```go
|
|
|
+func server(workChan <-chan *Work) {
|
|
|
+ for work := range workChan {
|
|
|
+ go safelyDo(work) // start the goroutine for that work
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func safelyDo(work *Work) {
|
|
|
+ defer func {
|
|
|
+ if err := recover(); err != nil {
|
|
|
+ log.Printf("Work failed with %s in %v", err, work)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ do(work)
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
## 链接
|
|
|
|
|
|
- [目录](directory.md)
|