今天在琢磨单个goroutine panic的时候会发生什么,然后搜了一下,发现了这个问题。
如果用了goroutine,那就老老实实在goroutine里面加上个defer recover,不然会把主进程搞crash掉。在panic的时候,之前已经defer的都会按照反序执行。
再进一步,如果在defer recover后的操作也出现了panic,再加个defer还是能recover回来,那就他么的递归下去了,所以我的理解是,在recover里面用最简单的逻辑即可,不要做复杂处理,推荐就是打打log。
如果这个函数是有返回值的,那发生panic返回的都是一些默认值。
在用goroutine做一个pool的时候,在处理的主函数上加个defer比较好,不要在select那个函数里。
网友评论