Go语言switch case语句匹配网络接收字符串失败:如何解决不可见字符导致的匹配问题?

go语言switch case语句匹配网络接收字符串失败的原因及解决方法

在使用go语言进行网络编程时,经常会遇到需要根据接收到的字符串进行不同操作的情况。本文将针对一个go语言程序中switch case语句无法匹配到通过网络接收到的字符串的问题进行分析和解决。

问题描述:程序使用net.conn.read方法接收客户端消息,然后使用strings.split和strings.trim处理接收到的字符串,最后使用switch case语句根据字符串内容执行不同操作。尽管打印出的action变量值与switch case中的case值相同(均为”tunnelok”),但switch case语句却无法匹配到该值。

代码片段如下:

func dealwithclientmsg(conn net.conn) {    read := make([]byte, 2048)    readtmp := make([]byte, 1024)    num, err := conn.read(readtmp)    if err != nil {        log.println("接受客户端消息失败:", err.error())    }    read = append(read, readtmp[:num]...)    log.println("接收到客户端消息:", string(read))    contentlist := strings.split(string(read), ":")    action := strings.trim(contentlist[0], " ")    //action := "tunnelok"    fmt.printf("%s%t",action, action) //此处输出结果:tunnelokstring    switch action {    case "tunnelok":        fmt.println("隧道打成功了")        ......    }}

问题原因分析:

立即学习“go语言免费学习笔记(深入)”;

问题在于read := make([]byte, 2048)这一行代码。该语句创建了一个长度为2048字节的byte切片read,其初始值全部为0。随后,append(read, readtmp[:num]…)将接收到的数据追加到read切片中。 string(read)将read切片转换为字符串时,包含了之前的2048个0字节,这些0字节对应的ascii码为不可见字符。strings.trim函数只去除字符串开头和结尾的空格,而无法去除这些不可见字符。因此,action变量中包含了不可见字符,导致switch case语句无法匹配。

解决方案:

为了解决这个问题,可以使用strings.trimspace函数代替strings.trim函数。trimspace函数会去除字符串开头和结尾的所有空白字符,包括不可见字符。修改后的代码如下:

action := strings.trimspace(contentlist[0])

更彻底的解决方案是避免在read切片中预先分配大量的空间。可以将read的声明修改为:

var read []byte

或者

read := []byte{}

这样可以避免在read切片中包含额外的0字节,从而避免了switch case匹配失败的问题。 readtmp是否也需要类似修改,可以根据实际情况进行测试。

以上就是Go语言switch case语句匹配网络接收字符串失败:如何解决不可见字符导致的匹配问题?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1385644.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月15日 05:35:11
Go语言中Person和*Person作为方法接收者,james.Eat()究竟传递了什么?
下一篇 2025年12月15日 05:35:20

相关推荐

  • Java新特性解读 Java9到Java17的重要更新内容

    Java新特性解读 Java9到Java17的重要更新内容Java新特性解读 Java9到Java17的重要更新内容Java新特性解读 Java9到Java17的重要更新内容Java新特性解读 Java9到Java17的重要更新内容

    java 9到java 17的重要更新包括:1. java 9引入模块化系统解决依赖管理混乱问题;2. java 10新增var关键字实现局部变量类型推断;3. java 11推出全新的http client api;4. java 12增强switch表达式支持简洁语法和返回值;5. java 1…

    2026年10月6日 • 用户投稿
    100
  • 《生化危机9》NS2对比PC版视频 光追效果不错

    《生化危机9》NS2对比PC版视频 光追效果不错《生化危机9》NS2对比PC版视频 光追效果不错《生化危机9》NS2对比PC版视频 光追效果不错《生化危机9》NS2对比PC版视频 光追效果不错

    近日,数毛社技术专家对《生化危机9:安魂曲》的switch2版预告与pc版预告进行了画面对比,重点分析了光线追踪技术的表现。令人惊喜的是,switch2版本的初步表现相当不错,展现出较强的光追适配能力。 对比视频: 据数毛社的技术解读,《生化危机9》在Switch2上成功实现了全局光照的光线追踪效果…

    2026年10月6日 • 用户投稿
    100
  • composer提示“proc_get_status() has been disabled”如何解决

    composer提示“proc_get_status() has been disabled”如何解决composer提示“proc_get_status() has been disabled”如何解决composer提示“proc_get_status() has been disabled”如何解决composer提示“proc_get_status() has been disabled”如何解决

    答案是修改php.ini启用proc_get_status和proc_open函数。具体操作为找到php.ini文件,注释或删除disable_functions中的proc_get_status和proc_open,保存后重启PHP服务,并确保CLI环境未禁用这些函数,若无法修改可联系管理员或使用…

    2026年10月6日 • 用户投稿
    200
  • win11快捷键失效用不了怎么办

    win11快捷键失效用不了怎么办win11快捷键失效用不了怎么办win11快捷键失效用不了怎么办win11快捷键失效用不了怎么办

    在windows 11系统中,快捷键是提升工作效率的重要工具,但有时可能会遇到快捷键失效的情况。如果遇到这个问题,可以尝试以下步骤来解决,一起看看具体的操作方法吧。 方法一: 首先检查键盘是否正常工作。确保键盘没有损坏,并且没有被锁定。(可以通过打字测试键盘是否可用) 方法二: 如果键盘确认无问题,…

    2026年10月6日 • 用户投稿
    100
  • win10注册表文件怎么导入

    win10注册表文件怎么导入win10注册表文件怎么导入win10注册表文件怎么导入win10注册表文件怎么导入

    如何在win10中导入注册表文件?其实这个问题的解决方法非常简单,今天就由我来教大家如何在win10中导入注册表文件。接下来,让我们一起学习一下具体的步骤吧。 如何在win10中导入注册表文件 1、首先登录到win10系统,按下“Win+R”组合键打开运行窗口,在运行窗口中输入“Regedit”命令…

    2026年10月6日 • 用户投稿
    100
  • win10系统任务管理器没有权限怎么办?

    win10系统任务管理器没有权限怎么办?win10系统任务管理器没有权限怎么办?win10系统任务管理器没有权限怎么办?win10系统任务管理器没有权限怎么办?

    在win10系统安装完成后,如果遇到任务管理器无权访问的情况,可以按照以下步骤来解决问题。下面的内容将详细讲解具体的解决方法。 解决步骤: 打开组策略编辑器:按下win+r键,调出运行窗口,输入 gpedit.msc ,随后按回车键。 定位相关设置:依次展开“用户配置” -> “管理模板” -…

    2026年10月6日 • 用户投稿
    000
  • 如何在Java中定义和使用枚举 Java枚举类型基础教程

    如何在Java中定义和使用枚举 Java枚举类型基础教程如何在Java中定义和使用枚举 Java枚举类型基础教程如何在Java中定义和使用枚举 Java枚举类型基础教程如何在Java中定义和使用枚举 Java枚举类型基础教程

    java枚举的核心优势在于类型安全和可读性。1. 类型安全:枚举限制变量只能取枚举常量,避免无效值传入,如用orderstatus枚举替代int常量,防止传入非法数字。2. 可读性:枚举使代码更具语义,如if (order.getstatus() == orderstatus.pending)比使用…

    2026年10月6日 • 用户投稿
    100
  • win11如何恢复经典的右键菜单_经典右键菜单恢复方法

    win11如何恢复经典的右键菜单_经典右键菜单恢复方法win11如何恢复经典的右键菜单_经典右键菜单恢复方法win11如何恢复经典的右键菜单_经典右键菜单恢复方法win11如何恢复经典的右键菜单_经典右键菜单恢复方法

    可通过命令行、注册表修改、导入.reg文件或使用Winaero Tweaker工具恢复Windows 11经典右键菜单,操作后重启资源管理器生效。 如果您发现Windows 11的右键菜单需要点击“显示更多选项”才能看到完整内容,操作变得繁琐,可以通过修改系统设置来恢复经典的右键菜单样式。以下是几种…

    2026年10月6日 • 用户投稿
    300
  • Java反射机制深入解析 Java如何动态获取和操作类信息

    Java反射机制深入解析 Java如何动态获取和操作类信息Java反射机制深入解析 Java如何动态获取和操作类信息Java反射机制深入解析 Java如何动态获取和操作类信息Java反射机制深入解析 Java如何动态获取和操作类信息

    java反射机制允许程序在运行时动态检查和修改类结构与行为,其核心应用包括框架实现(如spring ioc、junit)、序列化库(如jackson)、动态代理(如aop、rpc)、orm框架(如hibernate)及通用工具开发。使用反射时需注意性能问题(如查找解析开销、安全检查、jvm优化受限)…

    2026年10月6日 • 用户投稿
    100
  • iPadMini能否进行分屏_iPadMini进行分屏操作指南

    iPadMini能否进行分屏_iPadMini进行分屏操作指南iPadMini能否进行分屏_iPadMini进行分屏操作指南iPadMini能否进行分屏_iPadMini进行分屏操作指南iPadMini能否进行分屏_iPadMini进行分屏操作指南

    iPad Mini支持Split View和Slide Over两种分屏模式,可通过拖拽应用从Dock或顶部按钮实现多任务操作,多数应用兼容,8.3英寸屏在分屏时空间有限但轻量任务仍高效,分屏会增加性能负载和耗电,建议合理使用画中画、快速备忘录等辅助功能提升生产力。 可以。iPad Mini完全支持…

    2026年10月6日 • 用户投稿
    000
  • 外媒:火纹玩家分裂已久!新作能否终结争论?

    近日,外媒C%ignore_a_1%micbook发表文章指出,《火焰纹章》系列在玩家群体中长期存在显著分歧:一部分玩家钟情于角色之间的互动系统与庞大的剧情架构,而另一部分则更重视系列传统的战棋玩法核心。自《火焰纹章 觉醒》成功将该系列推向主流市场后,这一矛盾逐渐加剧,并在《风花雪月》和《Engag…

    2026年10月6日
    000
  • composer提示“Package … is not installed”但实际存在怎么办

    composer提示“Package … is not installed”但实际存在怎么办composer提示“Package … is not installed”但实际存在怎么办composer提示“Package … is not installed”但实际存在怎么办composer提示“Package … is not installed”但实际存在怎么办

    答案:Composer提示包未安装但实际存在时,通常是状态不同步所致。1. 运行composer install或composer update –lock同步缓存;2. 删除vendor和composer.lock后重装以确保一致性;3. 检查replace配置避免误标记;4. 确认已…

    2026年10月6日 • 用户投稿
    100
  • iPad分屏时如何共享剪贴板_iPad分屏跨应用粘贴技巧

    iPad分屏时如何共享剪贴板_iPad分屏跨应用粘贴技巧iPad分屏时如何共享剪贴板_iPad分屏跨应用粘贴技巧iPad分屏时如何共享剪贴板_iPad分屏跨应用粘贴技巧iPad分屏时如何共享剪贴板_iPad分屏跨应用粘贴技巧

    iPad分屏时共享剪贴板需开启“接力”与“通用剪贴板”功能,确保设备登录同一iCloud账户并连接稳定Wi-Fi,复制后在另一应用中粘贴即可。 iPad分屏时共享剪贴板,简单来说,就是让你在两个并排运行的App之间,像复制粘贴文本、图片一样方便。但实际操作起来,可能没那么直观,也可能遇到一些小问题。…

    2026年10月6日 • 用户投稿
    100
  • win10连接网络时显示无internet访问权限怎么办_网络连接正常但无法上网的解决方法

    运行网络疑难解答可自动修复常见问题;2. 重置网络适配器恢复默认设置;3. 修改TCP/IP高级属性启用NetBIOS;4. 检查组策略确保连接状态指示器启用;5. 重启路由器和调制解调器恢复网络服务。 如果您已成功连接到Wi-Fi网络,但系统仍提示“无Internet访问权限”,这通常意味着设备无…

    2026年10月6日
    200
  • 为什么Windows无法打开GIF文件?使用图片查看器的快速教程

    为什么Windows无法打开GIF文件?使用图片查看器的快速教程为什么Windows无法打开GIF文件?使用图片查看器的快速教程为什么Windows无法打开GIF文件?使用图片查看器的快速教程为什么Windows无法打开GIF文件?使用图片查看器的快速教程

    Windows无法打开GIF文件通常因文件关联错误或查看器不支持动画。旧版“Windows照片查看器”仅支持静态图片,而Win10/11的“照片”应用虽支持GIF,但可能因文件大或编码特殊导致卡顿。解决方法是右键GIF文件选择“打开方式”,指定“照片”应用或浏览器并勾选“始终使用此应用”。也可通过“…

    2026年10月6日 • 用户投稿
    100
  • 如何用Java实现简单Socket通信 Java客户端服务器通信示例

    如何用Java实现简单Socket通信 Java客户端服务器通信示例如何用Java实现简单Socket通信 Java客户端服务器通信示例如何用Java实现简单Socket通信 Java客户端服务器通信示例如何用Java实现简单Socket通信 Java客户端服务器通信示例

    在java中实现socket通信需掌握客户端与服务器端的连接与数据交换流程,并注意常见陷阱与优化策略。1. 服务器端使用serversocket监听端口,接受客户端连接并创建线程处理通信;客户端使用socket连接服务器并交换数据。2. 阻塞i/o可能导致性能瓶颈,应采用多线程或nio提升并发处理能…

    2026年10月6日 • 用户投稿
    300
  • composer update卡在 “Updating dependencies” 阶段怎么办

    composer update卡在 “Updating dependencies” 阶段怎么办composer update卡在 “Updating dependencies” 阶段怎么办composer update卡在 “Updating dependencies” 阶段怎么办composer update卡在 “Updating dependencies” 阶段怎么办

    答案:Composer update卡在依赖更新时,可通过增加日志、清缓存、换镜像、限范围等方法解决。具体顺序为:使用-vvv查看卡点,执行composer clear-cache清理缓存,尝试更新指定包降低解析压力,配置阿里云等国内镜像加速下载,必要时调整PHP内存和超时设置,最后可删除vendo…

    2026年10月6日 • 用户投稿
    000
  • Linux系统中怎么安装NSQ的Go语言客户端

    一、安装Go语言环境 在安装NSQ前,需先安装Go语言环境。在Linux系统中安装Go语言环境的步骤如下: 1.下载安装包官方网站https://golang.org/dl/提供了各种操作系统的安装包,下载对应Linux系统的安装包。 2.解压安装包将下载的安装包解压至Linux系统的指定目录,例如…

    2026年10月6日
    100
  • OmniConsistency— 新加坡国立大学推出的图像风格迁移模型

    OmniConsistency— 新加坡国立大学推出的图像风格迁移模型OmniConsistency— 新加坡国立大学推出的图像风格迁移模型OmniConsistency— 新加坡国立大学推出的图像风格迁移模型OmniConsistency— 新加坡国立大学推出的图像风格迁移模型

    OmniConsistency Explained omniconsistency is an image style transfer model developed by the national university of singapore. it addresses the issue o…

    2026年10月6日 • 用户投稿
    200
  • iPad分屏怎么调整显示方向_iPad分屏横屏与竖屏模式切换指南

    iPad分屏怎么调整显示方向_iPad分屏横屏与竖屏模式切换指南iPad分屏怎么调整显示方向_iPad分屏横屏与竖屏模式切换指南iPad分屏怎么调整显示方向_iPad分屏横屏与竖屏模式切换指南iPad分屏怎么调整显示方向_iPad分屏横屏与竖屏模式切换指南

    调整iPad分屏显示方向需先锁定屏幕方向,再选择支持横竖屏的应用组合。通过控制中心的旋转锁定功能固定屏幕方向,确保分屏时显示稳定;优先选用如Safari、Pages等支持多方向分屏的应用,并在分屏前单独测试应用方向兼容性;拖动分屏中间的分隔线可调整窗口大小,部分应用会因宽度变化自动适配布局;iPad…

    2026年10月6日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信