Bagaimanakah io.TeeReader dan io.Copy berbeza dalam Go?

Patricia Arquette
Lepaskan: 2024-10-25 07:42:02
asal
779 orang telah melayarinya

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

Perbezaan antara io.TeeReader dan io.Copy

In Go, io.TeeReader dan io.Copy memudahkan pemindahan data daripada io. Pembaca kepada seorang io.Penulis. Walaupun kedua-dua fungsi berfungsi untuk tujuan ini, ia menawarkan kefungsian yang berbeza.

io.Copy

io.Copy ialah fungsi ringkas dan mudah yang menyalin data dengan cekap daripada pembaca sumber kepada penulis destinasi. Ia memberi tumpuan semata-mata pada pemindahan data dan tidak mengembalikan nilai.

io.TeeReader

io.TeeReader menyediakan pendekatan yang lebih serba boleh. Tidak seperti io.Copy, io.TeeReader mencipta io.Reader baharu yang membungkus pembaca asal. Apabila membaca daripada pembaca baharu ini, data ditulis secara serentak kepada io.Writer yang disediakan. Ciri ini berguna apabila anda perlu memeriksa dan memproses data yang disalin.

Contoh Penggunaan

Untuk menggambarkan perbezaannya, pertimbangkan senario di mana kami perlu menyalin data daripada pembaca kepada output standard sambil juga mengira cincangan MD5 bagi kandungan yang disalin.

Menggunakan io.TeeReader:

<code class="go">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))</code>
Salin selepas log masuk

Dalam contoh ini, io.TeeReader membenarkan kami mencetak salinan yang disalin secara serentak data kepada output standard dan mengira cincang MD5 menggunakan fungsi h.Sum(nil).

io.MultiWriter

Perlu diperhatikan bahawa fungsi io.TeeReader juga boleh boleh dicapai menggunakan io.MultiWriter:

<code class="go">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))</code>
Salin selepas log masuk

io.MultiWriter menggabungkan berbilang penulis ke dalam satu destinasi, dengan berkesan membenarkan data ditulis ke berbilang lokasi serentak. Dalam kes ini, h menerima data yang disalin untuk pengiraan cincang, manakala os.Stdout memaparkannya.

Atas ialah kandungan terperinci Bagaimanakah io.TeeReader dan io.Copy berbeza dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!