code: func (lru *lru) get(epoch uint64) (item, future interface{}) {
  	lru.mu.Lock()
  	defer lru.mu.Unlock()
  
  	// Get or create the item for the requested epoch.
  	item, ok := lru.cache.Get(epoch)
  	if !ok {
  		if lru.future > 0 && lru.future == epoch {
  			item = lru.futureItem
  		} else {
  			log.Trace("Requiring new ethash "+lru.what, "epoch", epoch)
  			item = lru.new(epoch)
  		}
  		lru.cache.Add(epoch, item)
  	}
  	// Update the 'future item' if epoch is larger than previously seen.
  	if epoch < maxEpoch-1 && lru.future < epoch+1 {
  		log.Trace("Requiring new future ethash "+lru.what, "epoch", epoch+1)
  		future = lru.new(epoch + 1)
  		lru.future = epoch + 1
  		lru.futureItem = future
  	}
  	return item, future
  }
docs: // get retrieves or creates an item for the given epoch. The first return value is always
  // non-nil. The second return value is non-nil if lru thinks that an item will be useful in
  // the near future.