«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Чем io.TeeReader и io.Copy отличаются в Go?

Чем io.TeeReader и io.Copy отличаются в Go?

Опубликовано 4 ноября 2024 г.
Просматривать:328

How do io.TeeReader and io.Copy differ in Go?

Различия между 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