首頁  >  文章  >  後端開發  >  如何使用While迴圈正確讀取Go中串列埠的所有資料?

如何使用While迴圈正確讀取Go中串列埠的所有資料?

Susan Sarandon
Susan Sarandon原創
2024-10-26 21:29:29822瀏覽

How to Correctly Read All Data from a Serial Port in Go with a While-Loop?

使用 While-Loop 從串列埠讀取

這個問題涉及用 Go 編寫的程序,透過串口與感測器進行通訊。程式包含一個 while 迴圈來讀取傳入的數據,但無法正常運作。

原始程式碼:

<code class="go">buf := make([]byte, 40)
n := 0

for {
    n, _ = s.Read(buf)

    if n > 0 {
        break
    }
}

fmt.Println(string(buf[:n]))</code>

問題解釋:

這段程式碼的問題是Read() 可以在任何時間點傳回任意數量的可用資料。這意味著如果接收到少量數據,它將在下一次循環迭代中被覆蓋。

解決方案:

為了正確讀取所有傳入的數據,我們可以使用 bufio.Reader 讀取數據,直到我們遇到特定的分隔符號。在本例中,分隔符號假設為 'x0a'。

修改程式碼:

<code class="go">reader := bufio.NewReader(s)
reply, err := reader.ReadBytes('\x0a')
if err != nil {
    panic(err)
}
fmt.Println(reply)</code>

此程式碼將繼續從串列埠讀取數據,直到遇到「x0a」分隔符號。然後結果儲存在回應變數中並列印。

以上是如何使用While迴圈正確讀取Go中串列埠的所有資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn