Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membaca Respons Berbilang Talian dengan Pembatas CR/LF dalam Go?

Bagaimana untuk Membaca Respons Berbilang Talian dengan Pembatas CR/LF dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-28 16:48:02564semak imbas

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

Membaca Respons Berbilang Baris dengan Pembatas CR/LF dalam Go

Apabila melaksanakan klien Beanstalkd dalam Go, anda perlu membaca respons berbilang baris yang dibatasi oleh kedua-dua aksara baris baharu (n) dan aksara pemulangan pengangkutan (r). Fungsi lalai bufio.ReadLine hanya menyokong persempadanan dengan n.

Membaca Hingga CRLF

Untuk membaca sehingga pembatas CRLF, anda boleh menggunakan bufio.Scanner dengan fungsi SplitFunc tersuai:

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

Dalam kes ini, dropCR mengalih keluar aksara 'r' yang tertinggal daripada token.

Anda kemudian boleh menggunakan bufio.Scanner dengan fungsi ScanCRLF untuk membaca data:

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

Sebagai alternatif, bufio.NewReaderSize boleh digunakan untuk membaca panjang tertentu:

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

Atas ialah kandungan terperinci Bagaimana untuk Membaca Respons Berbilang Talian dengan Pembatas CR/LF dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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