Документация Google Cloud гласит, что для загрузки объекта из облачного хранилища необходимо использовать следующее:
rc, err := client.Bucket(bucket).Object(object).NewReader(ctx)
if err != nil {
return nil, err
}
defer rc.Close()
data, err := ioutil.ReadAll(rc)
if err != nil {
return nil, err
}
return data, nil
Источник: https://cloud.google.com/storage/docs/downloading-objects#storage-download-object-code_sample
Учитывая, что их SDK возвращает io.Reader
, вам не нужно беспокоиться о базовом методе, который используется для ссылки на загрузку в виде фрагментов (хотя, быстро просматривая их источник, он просто реализует http.NewRequest
, который делает то, что вы хотите, используя ту же логику).
Причина, по которой он, похоже, не «разбивается» в их примере, заключается в использовании ioutil.ReadAll
, который, хотя и подходит для простых случаев использования, извлекает все данные Reader
s в память (что также означает должен ждать, пока данные станут доступными).
Для лучшего понимания того, как справляться с Reader
пошагово, я рекомендую взглянуть на https://tour.golang.org/methods/21 для экскурсии по io.Reader
и на то, как вы можете использовать ее более эффективно.