code: func (it *invDatastoreIter) start(c context.Context, query *datastore.Query) {
  	it.results = make(chan *Invocation)
  	it.done = make(chan struct{})
  	go func() {
  		defer close(it.results)
  		err := datastore.Run(c, query, func(obj *Invocation, cb datastore.CursorCB) error {
  			select {
  			case it.results <- obj:
  				return nil
  			case <-it.done:
  				return datastore.Stop
  			}
  		})
  		// Let 'next' and 'stop' know about the error. They look here if they
  		// receive 'nil' from the results channel (which happens if it is closed).
  		it.err = err
  	}()
  }
docs: // start initiates the query.
  //
  // The iterator is initially positioned before the first item, so that a call
  // to 'next' will return the first item.