Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk membaca data daripada penimbal sehingga pembatas tertentu, CRLF, menggunakan SplitFunc tersuai dalam Go?
Pembaca Dibatas Tersuai dengan CRLF
Untuk membaca data daripada penimbal sehingga pembatas tertentu, dalam kes ini, CRLF (carriage return, suapan baris), laksanakan SplitFunc tersuai untuk bufio.Scanner.
<code class="go">// ScanCRLF splits the input data into tokens that are terminated by CRLF. 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 } // dropCR drops a terminal \r from the data. func dropCR(data []byte) []byte { if len(data) > 0 && data[len(data)-1] == '\r' { return data[0 : len(data)-1] } return data }</code>
Balut pembaca dengan pengimbas tersuai dan gunakan fungsi Scan() untuk membaca setiap baris:
<code class="go">// Wrap the reader with the custom scanner scanner := bufio.NewScanner(this.reader) scanner.Split(ScanCRLF) // Read each line using the scanner for scanner.Scan() { // Process the line as needed... } // Check for any errors encountered by the scanner if err := scanner.Err(); err != nil { // Log or handle the error }</code>
Alternatif: Membaca Bilangan Bait Khusus
Pilihan lain ialah membaca bilangan bait tertentu. Mula-mula, anda perlu menentukan saiz badan menggunakan protokol, cth., dengan membaca nilai "bait" daripada respons.
<code class="go">// Read the expected number of bytes nr_of_bytes, err := this.reader.ReadNumberBytesSomeHow() if err != nil { // Handle the error } // Allocate a buffer to hold the body buf := make([]byte, nr_of_bytes) // Read the body into the buffer this.reader.Read(buf) // Process the body as needed...</code>
Walau bagaimanapun, bergantung pada kaunter bait boleh berisiko. Adalah disyorkan untuk menggunakan pendekatan pembaca tersuai dengan pembatas CRLF, kerana ia mengikut protokol dengan lebih dekat.
Atas ialah kandungan terperinci Bagaimana untuk membaca data daripada penimbal sehingga pembatas tertentu, CRLF, menggunakan SplitFunc tersuai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!