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