29 lines
541 B
Go
29 lines
541 B
Go
|
package safe
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"runtime/debug"
|
||
|
)
|
||
|
|
||
|
// Go starts a recoverable goroutine
|
||
|
func Go(goroutine func()) {
|
||
|
GoWithRecover(goroutine, defaultRecoverGoroutine)
|
||
|
}
|
||
|
|
||
|
// GoWithRecover starts a recoverable goroutine using given customRecover() function
|
||
|
func GoWithRecover(goroutine func(), customRecover func(err interface{})) {
|
||
|
go func() {
|
||
|
defer func() {
|
||
|
if err := recover(); err != nil {
|
||
|
customRecover(err)
|
||
|
}
|
||
|
}()
|
||
|
goroutine()
|
||
|
}()
|
||
|
}
|
||
|
|
||
|
func defaultRecoverGoroutine(err interface{}) {
|
||
|
log.Println(err)
|
||
|
debug.PrintStack()
|
||
|
}
|