func New(ctx context.Context) (*group, context.Context) {
	ctx, cancel := context.WithCancel(ctx)
	return &group{ctx: ctx, cancel: cancel}, ctx
}
New returns a new GoGroup and an associated Context derived from the provided one.
The context is cancelled when the first goroutine started with Go terminates
regardless of the outcome.
package gogroup
import (
	"context"
	"sync"
)
type Group interface {
	Go(f func() error)
	Wait() error
}
type group struct {
	ctx    context.Context
	cancel func()
	errOnce sync.Once
	err     error
}