bcc5f24c0f
Signed-off-by: Emile Vauge <emile@vauge.com>
28 lines
541 B
Go
28 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()
|
|
}
|