...
1 package multierror
2
3 import "sync"
4
5
6
7 type Group struct {
8 mutex sync.Mutex
9 err *Error
10 wg sync.WaitGroup
11 }
12
13
14
15
16
17 func (g *Group) Go(f func() error) {
18 g.wg.Add(1)
19
20 go func() {
21 defer g.wg.Done()
22
23 if err := f(); err != nil {
24 g.mutex.Lock()
25 g.err = Append(g.err, err)
26 g.mutex.Unlock()
27 }
28 }()
29 }
30
31
32
33 func (g *Group) Wait() *Error {
34 g.wg.Wait()
35 g.mutex.Lock()
36 defer g.mutex.Unlock()
37 return g.err
38 }
39
View as plain text