func (e *errGroup) Go(goroutine func(context.Context) error) {
	e.waitGroup.Add(1)
	go func() {
		var err error
		defer func() {
			if r := recover(); r != nil {
				err = fmt.Errorf("%v.Stack:%s", r, debug.Stack())
			}
			if err != nil {
				e.errOnce.Do(func() {
					e.err = err
					e.cancel()
				})
			}
			e.waitGroup.Done()
		}()
		err = goroutine(e.ctx)
	}()
}
// Go starts a recoverable goroutine with a context.
Go starts a recoverable goroutine with a context.
// Go starts a recoverable goroutine with a context .
func (e *errGroup) Go(goroutine func(context.Context) error) {
	e.waitGroup.Add(1)
	go func() {
		var err error
		defer func() {
			if r := recover(); r != nil {
				err = fmt.Errorf("%v.Stack:%s", r, debug.Stack())
			}
			if err != nil {
				e.errOnce.Do(func() {
					e.err = err
					e.cancel()
				})
			}
			e.waitGroup.Done()
		}()
		err = goroutine(e.ctx)
	}()
}
func ( e * errGroup ) Go ( goroutine func ( context . Context ) error ) { e . waitGroup . Add ( 1 ) go func ( ) { var err error defer func ( ) { if r := recover ( ) ; r != nil { err = fmt . Errorf ( " " , r , debug . Stack ( ) ) } if err != nil { e . errOnce . Do ( func ( ) { e . err = err e . cancel ( ) } ) } e . waitGroup . Done ( ) } ( ) err = goroutine ( e . ctx ) } ( ) }
Go starts a recoverable goroutine with a context.
Go starts a recoverable goroutine with a context .