为什么需要超时控制?Go 超时控制必要性Go 正常都是用来写后端服务的,一般一个请求是由多个串行或并行的子任务来完成的,每个子任务可能是另外的内部请求,那么当这个请求超时的时候,我们就需要快速返回,释放占用的资源,比如goroutine,文件描述符等。goroutine泄露问题解决了!panic 无法捕获让我们把 hardWork 函数实现改成修改 main 函数加上捕获异常的代码如下:此时执行一下就会发现panic是无法被捕获的,原因是因为在 requestWork 内部起的goroutine里产生的panic其它goroutine无法捕获。解决方法是在 requestWork 里加上 panicChan 来处理,同样,需要 panicChan 的 buffer size 为1,如下:改完就可以在 requestWork 的调用方处理 panic 了。完整示例更多细节请参考 go-zero 源码:
暂无评论