首頁 > 後端開發 > Golang > 主體

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

Susan Sarandon
發布: 2024-10-26 21:29:29
原創
823 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!