package util import ( "fmt" "os" ) func GoWithRecover(handler func(), recoverHandler func(r interface{})) { if handler == nil { return } go func() { defer func() { if r := recover(); r != nil { if recoverHandler == nil { fmt.Fprintf(os.Stderr, "panic:\n %v\n", r) return } go func() { defer func() { if r := recover(); r != nil { fmt.Fprintf(os.Stderr, "panic:\n %v\n", r) } }() recoverHandler(r) }() } }() handler() }() }