pkg icon indicating copy to clipboard operation
pkg copied to clipboard

关于 goroutine 包中 GoWithRecover 函数拆分

Open cyb0225 opened this issue 2 years ago • 0 comments

https://github.com/mosn/pkg/blob/e3528eae50d92595b3ea1e5bf75fa4f6aff9c43e/utils/goroutine.go#L41-L60

这里的 GoWithRecover 是不是拆成两个函数比较好,我在使用 errgroup 需要传入裸函数,这样拆分可以使用到 recover 机制,同时是否开启 goroutine 交给用户决定。

 func GoWithRecover(handler func(), recoverHandler func(r interface{})) { 
 	go func() { 
 		WithRecover(handler, recoverHandler)
 	}() 
 } 

func WithRecover(handler func(), recoverHandler func(r interface{})) {
              defer func() { 
 			if r := recover(); r != nil { 
 				recoverLogger(os.Stderr, r) 
 				if recoverHandler != nil { 
 					go func() { 
 						defer func() { 
 							if p := recover(); p != nil { 
 								recoverLogger(os.Stderr, p) 
 							} 
 						}() 
 						recoverHandler(r) 
 					}() 
 				} 
 			} 
 		}() 
 		handler() 
}

cyb0225 avatar Jun 09 '23 03:06 cyb0225