code: func (b *batchProducer) Start() error {
  	b.runningMu.Lock()
  	defer b.runningMu.Unlock()
  
  	if b.running {
  		return ErrAlreadyStarted
  	}
  
  	go b.run()
  
  	// We want run to run in the background (in a goroutine) but we don’t want to return until that
  	// goroutine has actually entered its main loop. So we read from this non-buffered channel, which
  	// will block until run writes a value to it.
  	<-b.start
  
  	b.running = true
  
  	return nil
  }
docs: // from/for interface Producer