Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah io.TeeReader dan io.Copy berbeza dalam Go?

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

Patricia Arquette
Patricia Arquetteasal
2024-10-25 07:42:02857semak imbas

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>

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>

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!

Kenyataan:
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