code: func (mem *Memory) Delete(key string) (*rspb.Release, error) {
  	defer unlock(mem.wlock())
  
  	elems := strings.Split(key, ".v")
  
  	if len(elems) != 2 {
  		return nil, storageerrors.ErrInvalidKey(key)
  	}
  
  	name, ver := elems[0], elems[1]
  	if _, err := strconv.Atoi(ver); err != nil {
  		return nil, storageerrors.ErrInvalidKey(key)
  	}
  	if recs, ok := mem.cache[name]; ok {
  		if r := recs.Remove(key); r != nil {
  			// recs.Remove changes the slice reference, so we have to re-assign it.
  			mem.cache[name] = recs
  			return r.rls, nil
  		}
  	}
  	return nil, storageerrors.ErrReleaseNotFound(key)
  }
docs: // Delete deletes a release or returns ErrReleaseNotFound.