func (g *Gate) Start(ctx context.Context) error {
	select {
	case <-ctx.Done():
		return ctx.Err()
	case g.ch <- struct{}{}:
		return nil
	}
}
func (g *Gate) Start(ctx context.Context) error {
	select {
	case <-ctx.Done():
		return ctx.Err()
	case g.ch <- struct{}{}:
		return nil
	}
}
func ( g * Gate ) Start ( ctx context . Context ) error { select { case <- ctx . Done ( ) : return ctx . Err ( ) case g . ch <- struct { } { } : return nil } }
// Start blocks until the gate has a free spot or the context is done.
Start blocks until the gate has a free spot or the context is done .