Maison >développement back-end >Golang >Convertir de `bufio.Reader` en `io.ReadWriteCloser`

Convertir de `bufio.Reader` en `io.ReadWriteCloser`

王林
王林avant
2024-02-05 22:48:07941parcourir

从 `bufio.Reader` 转换为 `io.ReadWriteCloser`

Contenu de la question

J'en ai une io.readwritecloser et je veux y jeter un coup d'œil sans faire avancer les lecteurs,

Donc j'utilise

bi := bufio.NewReader(i)
bi.Peek(1)

Jusqu'ici tout va bien, mais quand je veux réutiliser l'original io.readwritecloser (i) 时,它只有 eof (i), il n'a que eof.

Ma question est donc de savoir comment reconvertir bufio.reader en bufio.reader 转换回 io.readwritecloser


Réponse correcte


Puisque bufio.reader met en mémoire tampon les données du lecteur sous-jacent, l'application doit le faire après avoir appelé peek Lisez les données de bufio.reader.

Pour obtenir un io.readwritecloser qui fait cela, enveloppez bufio.reader et l'original io.readwritecloser :

// bufferedreadwritecloser has all of the methods
// from *bufio.reader and io.readwritecloser.
type bufferedreadwritecloser struct {
    *bufio.reader
    io.readwritecloser
}

func (rw *bufferedreadwritecloser) read(p []byte) (int, error) {
    return rw.reader.read(p)
}

Comment l'utiliser est le suivant :

rw := &BufferedReadWriteCloser{bufio.NewReader(i), i}
p, err := rw.Peek(1)
La valeur de

rw satisfait l'interface io.readwritecloser.

N'exige ni ne suppose que io.readwritecloser ait une méthode de recherche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer