Maison > développement back-end > Golang > Comment lire les réponses multilignes avec le délimiteur CR/LF dans Go ?

Comment lire les réponses multilignes avec le délimiteur CR/LF dans Go ?

Susan Sarandon
Libérer: 2024-10-28 16:48:02
original
638 Les gens l'ont consulté

How to Read Multiline Responses with CR/LF Delimiter in Go?

Lecture des réponses multilignes avec délimiteur CR/LF dans Go

Lors de l'implémentation d'un client Beanstalkd dans Go, il est nécessaire de lire les réponses multilignes délimitées par le caractère de nouvelle ligne (n) et le caractère de retour chariot (r). La fonction par défaut bufio.ReadLine ne prend en charge que la délimitation par n.

Lecture jusqu'à CRLF

Pour lire jusqu'au délimiteur CRLF, vous pouvez utiliser bufio.Scanner avec une fonction SplitFunc personnalisée :

<code class="go">import (
    "bufio"
    "fmt"
    "io"

    "bytes"
)

func ScanCRLF(data []byte, atEOF bool) (advance int, token []byte, err error) {
    if atEOF && len(data) == 0 {
        return 0, nil, nil
    }
    if i := bytes.Index(data, []byte{'\r', '\n'}); i >= 0 {
        return i + 2, dropCR(data[0:i]), nil
    }
    if atEOF {
        return len(data), dropCR(data), nil
    }
    return 0, nil, nil
}</code>
Copier après la connexion

Dans ce cas, dropCR supprime le caractère « r » de fin du jeton.

Vous pouvez ensuite utiliser un bufio.Scanner avec la fonction ScanCRLF pour lire les données :

<code class="go">scanner := bufio.NewScanner(this.reader)
scanner.Split(ScanCRLF)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}</code>
Copier après la connexion

Alternativement, bufio.NewReaderSize peut être utilisé pour lire une longueur spécifique :

<code class="go">var nr_of_bytes int
nr_of_bytes, _ = strconv.Atoi(res)
buf := make([]byte, nr_of_bytes)
_, _ = io.ReadAtLeast(this.reader,buf, nr_of_bytes)</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal