首页  >  文章  >  后端开发  >  如何使用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