code: func (c *Cache) GetOrCreateBytes(id string, create func() ([]byte, error)) (ItemInfo, []byte, error) {
  	id = cleanID(id)
  
  	c.nlocker.Lock(id)
  	defer c.nlocker.Unlock(id)
  
  	info := ItemInfo{Name: id}
  
  	if r := c.getOrRemove(id); r != nil {
  		defer r.Close()
  		b, err := ioutil.ReadAll(r)
  		return info, b, err
  	}
  
  	b, err := create()
  	if err != nil {
  		return info, nil, err
  	}
  
  	if c.maxAge == 0 {
  		return info, b, nil
  	}
  
  	if err := afero.WriteReader(c.Fs, id, bytes.NewReader(b)); err != nil {
  		return info, nil, err
  	}
  	return info, b, nil
  
  }
docs: // GetOrCreateBytes is the same as GetOrCreate, but produces a byte slice.