Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membaca Semua Data dengan Betul dari Port Bersiri dalam Go dengan While-Loop?

Bagaimana untuk Membaca Semua Data dengan Betul dari Port Bersiri dalam Go dengan While-Loop?

Susan Sarandon
Susan Sarandonasal
2024-10-26 21:29:29822semak imbas

How to Correctly Read All Data from a Serial Port in Go with a 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!

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