code: func (d *driver) Delete(context context.Context, path string) error {
  	prefix := d.pathToDirKey(path)
  	gcsContext := d.context(context)
  	keys, err := d.listAll(gcsContext, prefix)
  	if err != nil {
  		return err
  	}
  	if len(keys) > 0 {
  		sort.Sort(sort.Reverse(sort.StringSlice(keys)))
  		for _, key := range keys {
  			err := storageDeleteObject(gcsContext, d.bucket, key)
  			// GCS only guarantees eventual consistency, so listAll might return
  			// paths that no longer exist. If this happens, just ignore any not
  			// found error
  			if status, ok := err.(*googleapi.Error); ok {
  				if status.Code == http.StatusNotFound {
  					err = nil
  				}
  			}
  			if err != nil {
  				return err
  			}
  		}
  		return nil
  	}
  	err = storageDeleteObject(gcsContext, d.bucket, d.pathToKey(path))
  	if err != nil {
  		if status, ok := err.(*googleapi.Error); ok {
  			if status.Code == http.StatusNotFound {
  				return storagedriver.PathNotFoundError{Path: path}
  			}
  		}
  	}
  	return err
  }
docs: // Delete recursively deletes all objects stored at "path" and its subpaths.