Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Membaca Semua Data dengan Betul dari Port Bersiri dalam Go dengan While-Loop?
Membaca dari Port Bersiri Menggunakan Gelung Sementara
Soalan ini berkenaan program yang ditulis dalam Pergi untuk berkomunikasi dengan penderia melalui port bersiri . Program ini termasuk gelung sementara untuk membaca data masuk, tetapi ia gagal berfungsi dengan betul.
Kod Asal:
<code class="go">buf := make([]byte, 40) n := 0 for { n, _ = s.Read(buf) if n > 0 { break } } fmt.Println(string(buf[:n]))</code>
Penjelasan Masalah:
Isu dengan kod ini ialah Read() boleh kembali pada bila-bila masa dengan sebarang jumlah data yang tersedia. Ini bermakna jika sejumlah kecil data diterima, ia akan ditimpa dalam lelaran gelung seterusnya.
Penyelesaian:
Untuk membaca semua data masuk dengan betul, kami boleh menggunakan bufio.Reader untuk membaca data sehingga pembatas tertentu ditemui. Dalam kes ini, pembatas diandaikan sebagai 'x0a'.
Kod Diubah Suai:
<code class="go">reader := bufio.NewReader(s) reply, err := reader.ReadBytes('\x0a') if err != nil { panic(err) } fmt.Println(reply)</code>
Kod ini akan terus membaca data dari port bersiri sehingga 'x0a' pembatas ditemui. Hasilnya kemudian disimpan dalam pembolehubah balasan dan dicetak.
Atas ialah kandungan terperinci Bagaimana untuk Membaca Semua Data dengan Betul dari Port Bersiri dalam Go dengan While-Loop?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!