code: func (f *DatastoreFile) Read(b []byte) (int, error) {
  	if f.offset.read != f.offset.seek {
  		// A Seek() call changed the offset, we need to issue a new GET
  		_ = f.Close()
  
  		f.offset.read = f.offset.seek
  	} else if f.buf != nil {
  		// f.buf + f behaves like an io.MultiReader
  		n, err := f.buf.Read(b)
  		if err == io.EOF {
  			f.buf = nil // buffer has been drained
  		}
  		if n > 0 {
  			return n, nil
  		}
  	}
  
  	body, err := f.get()
  	if err != nil {
  		return 0, err
  	}
  
  	n, err := body.Read(b)
  
  	f.offset.read += int64(n)
  	f.offset.seek += int64(n)
  
  	return n, err
  }
docs: // Read reads up to len(b) bytes from the DatastoreFile.