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