code: func (c *cache) GetWithExpiration(k string) (interface{}, time.Time, bool) {
  	c.mu.RLock()
  	// "Inlining" of get and Expired
  	item, found := c.items[k]
  	if !found {
  		c.mu.RUnlock()
  		return nil, time.Time{}, false
  	}
  
  	if item.Expiration > 0 {
  		if time.Now().UnixNano() > item.Expiration {
  			c.mu.RUnlock()
  			return nil, time.Time{}, false
  		}
  
  		// Return the item and the expiration time
  		c.mu.RUnlock()
  		return item.Object, time.Unix(0, item.Expiration), true
  	}
  
  	// If expiration <= 0 (i.e. no expiration time set) then return the item
  	// and a zeroed time.Time
  	c.mu.RUnlock()
  	return item.Object, time.Time{}, true
  }
docs: // GetWithExpiration returns an item and its expiration time from the cache.
  // It returns the item or nil, the expiration time if one is set (if the item
  // never expires a zero value for time.Time is returned), and a bool indicating
  // whether the key was found.