Initial QSfera import
This commit is contained in:
+22
@@ -0,0 +1,22 @@
|
||||
package syncs
|
||||
|
||||
import "fmt"
|
||||
|
||||
// Go is a basic promise implementation: it wraps calls a function in a goroutine
|
||||
// and returns a channel which will later return the function's return value.
|
||||
//
|
||||
// if panic happen, it will be recovered and return as error
|
||||
func Go(f func() error) error {
|
||||
ch := make(chan error)
|
||||
go func() {
|
||||
// add recovery handle
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
ch <- fmt.Errorf("panic recover: %v", r)
|
||||
}
|
||||
}()
|
||||
|
||||
ch <- f()
|
||||
}()
|
||||
return <-ch
|
||||
}
|
||||
Reference in New Issue
Block a user