Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah io.TeeReader dan io.Copy berbeza dalam 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!