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