code: func (c *ExpirationCache) List() []interface{} {
  	items := c.cacheStorage.List()
  
  	list := make([]interface{}, 0, len(items))
  	for _, item := range items {
  		obj := item.(*TimestampedEntry).Obj
  		if key, err := c.keyFunc(obj); err != nil {
  			list = append(list, obj)
  		} else if obj, exists := c.getOrExpire(key); exists {
  			list = append(list, obj)
  		}
  	}
  	return list
  }
docs: // List retrieves a list of unexpired items. It purges the cache of expired
  // items in the process.