Различия между io.TeeReader и io.Copy
В Go io.TeeReader и io.Copy облегчают передачу данных из io. Reader для io.Writer. Хотя обе функции служат этой цели, они предлагают разные функциональные возможности.
io.Copy
io.Copy — это простая и понятная функция, которая эффективно копирует данные из источника чтения. писателю назначения. Он ориентирован исключительно на передачу данных и не возвращает никаких значений.
io.TeeReader
io.TeeReader обеспечивает более универсальный подход. В отличие от io.Copy, io.TeeReader создает новый io.Reader, который оборачивает исходный модуль чтения. При чтении из этого нового устройства чтения данные одновременно записываются в предоставленный io.Writer. Эта функция полезна, когда вам необходимо как проверять, так и обрабатывать скопированные данные.
Пример использования
Чтобы проиллюстрировать разницу, рассмотрим сценарий, в котором нам нужно скопировать данные из устройство чтения на стандартный вывод, одновременно вычисляя MD5-хеш скопированного контента.
Использование io.TeeReader:
r := io.TeeReader(strings.NewReader(s), os.Stdout)
h := md5.New()
if _, err := io.Copy(h, r); err != nil { panic(err) }
fmt.Printf("Hash: %x\n", h.Sum(nil))
В этом примере io.TeeReader позволяет нам одновременно распечатать скопированные данные на стандартный вывод и вычислить хэш MD5, используя h.Sum(ноль) function.
io.MultiWriter
Стоит отметить, что функциональность io.TeeReader также может быть реализована с помощью io.MultiWriter:
mw := io.MultiWriter(h, os.Stdout)
if _, err := io.Copy(mw, strings.NewReader(s)); err != nil { panic(err) }
fmt.Printf("Hash: %x\n", h.Sum(nil))
io.MultiWriter объединяет несколько устройств записи в одно место назначения, эффективно позволяя записывать данные в несколько мест одновременно. В этом случае h получает скопированные данные для вычисления хэша, а os.Stdout отображает их.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3