pkg
pkg copied to clipboard
关于 goroutine 包中 GoWithRecover 函数拆分
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()
}