Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah saya Boleh Membaca daripada io.Reader Berbilang Kali dalam Go?

Bagaimanakah saya Boleh Membaca daripada io.Reader Berbilang Kali dalam Go?

Patricia Arquette
Lepaskan: 2024-12-18 19:36:11
asal
920 orang telah melayarinya

How Can I Read from an io.Reader Multiple Times in Go?

Baca Berbilang Kali daripada Single io.Reader

In Go, menggunakan antara muka io.ReadCloser untuk membaca data daripada sumber boleh membentangkan cabaran apabila cuba membacanya beberapa kali. Sebagai contoh, pertimbangkan senario di mana anda ingin menggunakan request.Body (taip io.ReadCloser), yang mengandungi imej, untuk menulis terus ke fail dan penyahkodan.

Masalah:

Percubaan untuk mencipta berbilang kejadian pembaca, seperti dalam kod berikut, menyebabkan panggilan kedua mengembalikan sifar nilai:

package main

import (
    "io/ioutil"
    "log"
    "strings"
)


func main() {
    r := strings.NewReader("some io.Reader stream to be read\n")
    a := &r
    b := &r
    log.Println(ioutil.ReadAll(*a))
    log.Println(ioutil.ReadAll(*b))

}
Salin selepas log masuk

Penyelesaian:

Antara muka io.Reader memodelkan strim, bermakna ia tidak boleh dibaca dua kali. Untuk mengatasi had ini, anda boleh menggunakan fungsi io.TeeReader untuk mencipta strim pendua.

package main

import (
    "bytes"
    "io"
    "io/ioutil"
    "log"
    "strings"
)

func main() {
    r := strings.NewReader("some io.Reader stream to be read\n")
    var buf bytes.Buffer
    tee := io.TeeReader(r, &buf)

    log.Println(ioutil.ReadAll(tee))
    log.Println(ioutil.ReadAll(&buf)) 
}
Salin selepas log masuk

Kod ini menunjukkan cara menggunakan io.TeeReader untuk mencipta strim pendua daripada r dan menulis kandungan pada kedua-duanya tee dan buf. Dengan membaca daripada tee dahulu, anda boleh memastikan penimbal diisi dengan kandungan strim.

Atas ialah kandungan terperinci Bagaimanakah saya Boleh Membaca daripada io.Reader Berbilang Kali 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