diff --git a/eBook/14.6.md b/eBook/14.6.md index ef80b43..7618cb9 100644 --- a/eBook/14.6.md +++ b/eBook/14.6.md @@ -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)