github.com/zly-app/zapp@v1.3.3/pkg/utils/go.go (about) 1 package utils 2 3 import ( 4 "sync" 5 ) 6 7 var Go = goCli{} 8 9 type goCli struct{} 10 11 // 执行等待所有函数完成, 会自动 Recover, 如果有函数执行错误, 会返回第一个不为nil的error 12 func (goCli) GoAndWait(fns ...func() error) error { 13 if len(fns) == 0 { 14 return nil 15 } 16 17 var wg sync.WaitGroup 18 errChan := make(chan error, len(fns)) 19 20 for _, fn := range fns { 21 wg.Add(1) 22 go func(fn func() error) { 23 defer wg.Done() 24 if e := Recover.WrapCall(fn); e != nil { 25 errChan <- e 26 } 27 }(fn) 28 } 29 wg.Wait() 30 31 var err error 32 select { 33 case err = <-errChan: 34 default: 35 } 36 return err 37 }