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
Susan Sarandonoriginal
2024-10-28 16:48:02635parcourir

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>

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>

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>

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