code: func (c *ExpirationCache) getOrExpire(key string) (interface{}, bool) {
  	timestampedItem, exists := c.getTimestampedEntry(key)
  	if !exists {
  		return nil, false
  	}
  	if c.expirationPolicy.IsExpired(timestampedItem) {
  		glog.V(4).Infof("Entry %v: %+v has expired", key, timestampedItem.obj)
  		// Since expiration happens lazily on read, don't hold up
  		// the reader trying to acquire a write lock for the delete.
  		// The next reader will retry the delete even if this one
  		// fails; as long as we only return un-expired entries a
  		// reader doesn't need to wait for the result of the delete.
  		go func() {
  			defer runtime.HandleCrash()
  			c.cacheStorage.Delete(key)
  		}()
  		return nil, false
  	}
  	return timestampedItem.obj, true
  }
docs: // getOrExpire retrieves the object from the timestampedEntry if and only if it hasn't
  // already expired. It kicks-off a go routine to delete expired objects from
  // the store and sets exists=false.