code: func (p *PeekingSource) Record() (interface{}, error) {
  	p.mu.RLock()
  	var rec interface{}
  	if p.rec == nil {
  		defer p.mu.RUnlock()
  		return p.Source.Record()
  	} else {
  		// Exchange read lock for write lock and recheck p.rec
  		p.mu.RUnlock()
  		p.mu.Lock()
  		if p.rec == nil {
  			p.mu.Unlock()
  			return p.Record()
  		}
  		rec = p.rec
  		p.rec = nil
  		p.mu.Unlock()
  		return rec, nil
  	}
  }
docs: // Record returns the next record in the underlying source, first checking if a
  // cached record from Peek() has been set.