code: func (q *SQSDispatcher) start(handle func(context.Context, *sqs.Message) error) {
  	var wg sync.WaitGroup
  	for {
  		select {
  		case <-q.stopped:
  			wg.Wait()
  			return
  		default:
  			ctx := q.Context
  
  			resp, err := q.sqs.ReceiveMessage(&sqs.ReceiveMessageInput{
  				QueueUrl:        aws.String(q.QueueURL),
  				WaitTimeSeconds: aws.Int64(defaultWaitTime),
  			})
  			if err != nil {
  				reporter.Report(ctx, err)
  				continue
  			}
  
  			for _, m := range resp.Messages {
  				wg.Add(1)
  				go func(m *sqs.Message) {
  					defer wg.Done()
  					if err := q.handle(ctx, handle, m); err != nil {
  						reporter.Report(ctx, err)
  					}
  				}(m)
  			}
  		}
  	}
  }
docs: // start starts a pulling messages off of the queue and passing them to the
  // handler.