You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言串口读取去除 及实现类似Python readline方法

在Go中处理串口读取的换行符与按行读取

刚上手Go做串口通信确实会遇到这类和Python不一样的细节问题,别担心,我给你拆解清楚这两个需求~

一、实现类似Python readline()的按行读取功能

在Go里,我们可以借助bufio包的缓冲阅读器来实现按行读取,和Python的readline()逻辑完全对应。首先你需要一个常用的串口库tarm/serial(可以通过go get github.com/tarm/serial安装),以下是完整的示例流程:

  1. 先配置并打开串口:
package main

import (
    "bufio"
    "fmt"
    "strings"
    "github.com/tarm/serial"
)

func main() {
    // 配置串口参数,根据你的Arduino实际参数调整
    cfg := &serial.Config{
        Name: "/dev/ttyUSB0", // Windows下可能是"COM3"这类端口名
        Baud: 9600,
    }

    // 打开串口
    port, err := serial.OpenPort(cfg)
    if err != nil {
        fmt.Printf("打开串口失败: %v\n", err)
        return
    }
    defer port.Close() // 确保程序退出时自动关闭串口
  1. 创建缓冲阅读器,实现按行读取:
// 创建bufio阅读器,串口对象本身实现了io.Reader接口,可直接传入
    reader := bufio.NewReader(port)

    // 循环读取每一行,逻辑和Python的while line := line.readline()一致
    for {
        // ReadString('\n')会持续缓冲数据,直到遇到'\n'才返回整行,返回的字符串包含'\n'本身
        line, err := reader.ReadString('\n')
        if err != nil {
            fmt.Printf("读取串口数据失败: %v\n", err)
            break
        }

        fmt.Printf("原始读取内容: %q\n", line)
    }
}

bufio.NewReader的ReadString('\n')方法会帮你自动处理数据流的缓冲,完美实现按行读取的需求。

二、去除输出中的\r和\n字符

从你的示例输出"arduinoLED"}\r\n{"temperature"来看,Arduino输出的是Windows风格的换行(\r\n),我们有两种可靠的清理方式:

方法1:精准去除结尾的\r\n

如果确定每一行的结尾固定是\r\n,用strings.TrimSuffix()最精准,不会误删内容里的其他字符:

cleanLine := strings.TrimSuffix(line, "\r\n")

方法2:兼容多种换行格式并清理首尾空白

如果不确定换行符是\r\n还是单独的\n,或者想顺便去掉行首行尾的空格、制表符等空白字符,可以用strings.TrimSpace():

cleanLine := strings.TrimSpace(line)

把清理逻辑加到读取循环里,完整的处理代码如下:

for {
    line, err := reader.ReadString('\n')
    if err != nil {
        fmt.Printf("读取串口数据失败: %v\n", err)
        break
    }

    // 选择一种清理方式
    cleanLine := strings.TrimSuffix(line, "\r\n")
    // 或者用:cleanLine := strings.TrimSpace(line)

    fmt.Printf("清理后内容: %q\n", cleanLine)
}

这样处理后,你就能得到没有\r和\n的干净传感器数据了。

内容的提问来源于stack exchange,提问作者Melissa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:15:57