Как мне использовать повторное использование потока в Go? - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть структура Artifact и следующие две интересующие функции:

type Artifact struct {
    Name string
    ZipFile io.ReadWriter
}

func New(name string, files []string, zipArchiveStream io.ReadWriter) *Artifact {}
func (a *Artifact) Upload() error {}

Так вот в чем проблема: перед передачей этого io.ReadWriter я использовал имя файла.Мне нужно выполнить три операции с zip-файлом:

  1. Добавить в него необходимые файлы (например, запись)
  2. Перечитать его, чтобы вычислить сумму SHA256 (например, Seek, Чтение)
  3. Загрузить его в корзину S3 (т. Е. Найти, прочитать)

Ну и прежде, при использовании имени файла я открывал, закрывал, снова открывал и т. Д.за каждую операцию.Однако я начал писать модульные тесты и понял, что мой код на самом деле не тестируемый , поэтому я решил, что буду использовать io.ReadWriter, чтобы открывать файлы при реальном использовании кода и пропускать буферы при тестировании.

Проблема сейчас в том, что после чтения потока его внутренний указатель необходимо сбросить для выполнения второго чтения (т. Е. Вычисления контрольной суммы, а затем загрузки), но, насколько я прочитал, потоки не могутбыть перезаписан.Как мне подойти к этой проблеме?потому что кажется, что некоторые концептуально неверны с моим текущим подходом.

1 Ответ

0 голосов
/ 23 февраля 2019

Рассматривали ли вы вместо этого использование интерфейса io.ReadWriteSeeker?

bytes.Reader реализует Seek

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...