package builder import ( "fmt" "golang.org/x/sync/errgroup" "runtime/debug" ) // WaitAndGo 等待所有函数执行完毕 func WaitAndGo(fn ...func() error) error { var g errgroup.Group for _, f := range fn { if f == nil { continue } g.Go(func() (err error) { defer func() { if r := recover(); r != nil { err = fmt.Errorf("panic: %+v\n%s", r, string(debug.Stack())) } }() return f() }) } return g.Wait() }