Heim  >  Artikel  >  Backend-Entwicklung  >  Wie lese ich mehrzeilige Antworten mit CR/LF-Trennzeichen in Go?

Wie lese ich mehrzeilige Antworten mit CR/LF-Trennzeichen in Go?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 16:48:02564Durchsuche

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

Mehrzeilige Antworten mit CR/LF-Trennzeichen in Go lesen

Bei der Implementierung eines Beanstalkd-Clients in Go ist es notwendig, mehrzeilige Antworten zu lesen, die durch das New-Line-Zeichen getrennt sind (n) und das Wagenrücklaufzeichen (r). Die Standardfunktion bufio.ReadLine unterstützt nur das Trennen durch n.

Lesen bis CRLF

Um bis zum CRLF-Trennzeichen zu lesen, können Sie bufio.Scanner mit einer benutzerdefinierten SplitFunc-Funktion verwenden:

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

In diesem Fall entfernt dropCR das abschließende „r“-Zeichen aus dem Token.

Sie können dann einen bufio.Scanner mit der ScanCRLF-Funktion verwenden, um die Daten zu lesen:

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

Alternativ kann bufio.NewReaderSize verwendet werden, um eine bestimmte Länge zu lesen:

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

Das obige ist der detaillierte Inhalt vonWie lese ich mehrzeilige Antworten mit CR/LF-Trennzeichen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn