go语言将单反斜杠改为双反斜杠

最近开发的时候遇到这么个问题,就是在window上获取了文件目录的字段,然后将这个绝对路径保存到数据库,最后前端需要请求的时候,就需要读取数据库存的文件目录路径给前端,前端要进行展示。但是前端展示的时候路径的双反斜杠变成了单反斜杠,然后问题来了,对于这个路径我们有模糊查询的功能,导致含有单反斜杠的模糊查询无法正常查询。

经过查询多方资料和测试,发现反斜杠是属于转义字符,我查看数据库和返回给前端的数据,里面的数据都是有两个反斜杠的,但是前端显示出来就只有一个,这个是属于正常的,因为是字符串,两个反斜杠,其中一个被认为是转义字符,另一个被认为是字符串,所以只显示一个反斜杠,但是关键字查询的时候,用户肯定是直接复制显示的单个反斜杠的字符串,所以就导致了查询不出来。

具体的现象如下所示:

1、现象描述

前面已经简单说了情况,我数据库里面存的是这样子的:

复制代码
C:\\Program Files\\WPS Office\\12.1.0.16250\\wtoolex\\wpsupdate.exe

但是你如果取出数据然后打印出来,他也是单反斜杠,因为打印的时候他认为两个单反斜杠其中一个是转义字符,但是数据库里面本质是存的两个反斜杠,你把数据取出来写到文件里面看,就是两个单反斜杠。

然后我发给前端,前端收到的也是双反斜杠的,但是就显示的就是单斜杠,所以查询的时候考妣网页显示单反斜杠的路径去模糊查询是查询不到的。

2、解决办法

当时我想到的解决办法有两种,一种就是让前端直接显示全部的字符串,即显示两个反斜杠的字符串,然后用户到时候直接复制来进行模糊查询即可,前端的处理方法我目前不知道咋个实现,应该还是可以实现的,我做后端的,这里讲下我后端怎么实现的:

后端的实现方法就是将原来的单反斜杠给他变成双反斜杠,我之前找了很久,一直没找到实现的方法,最后无意中找到了,使用fmt.Sprintf就可以实现。具体实现代码如下所示

复制代码
strjelly := `C:\jelly\path`
strjelly = fmt.Sprintf("%#v", strjelly)
num := len(strjelly)
fmt.Println(num)
fmt.Println(strjelly)
fmt.Println(strjelly[1 : num-1])

代码中,假设你的字符串变量是strjelly,字符串里面含有两个单反斜杠,然后经过fmt.Sprintf("%#v", strjelly)处理后,里面的单反斜杠就会变成双反斜杠,但是这样转换后不能直接用,因为这样转换后,他会前后多字符串引号,需要使用strjelly[1 : num-1])把前后的两个引号字符给去掉,具体的打印如下所示:

复制代码
17
"C:\\jelly\\path"
C:\\jelly\\path

可以看到,经过fmt.Sprintf处理后,字符串的长度多了4,原来的字符串数一下是13,为什么多个4呢,因为转换后两个单反斜杠变成了双反斜杠,增加了2,然后前后多了一个引号,增加了2,一共就是增加了4。然后再使用strjelly[1 : num-1]去掉前后的两个引号即可。

3、总结

以上就是记录的单反斜杠转双反斜杠的记录,本方法是针对go语言的,可能场景比较特殊,不是非常适用,也记录下来,方便后续查询。其实最开始的时候,比较困惑,因为打印出来就是单反斜杠,然后读出来用文件保存下来又是双反斜杠,还是折腾的比较久。最后经过查询,猜测,验证,终于明白了其中的关键,其实当时使用打印字符串的长度估计也能知道其中的蹊跷所在。

相关推荐
Amour恋空2 分钟前
Java多线程
java·开发语言·python
小陈工8 分钟前
2026年3月28日技术资讯洞察:5G-A边缘计算落地、低延迟AI推理革命与工业智造新范式
开发语言·人工智能·后端·python·5g·安全·边缘计算
第二只羽毛29 分钟前
C++ 高并发内存池1
大数据·开发语言·c++·开源
不想看见40437 分钟前
C++/Qt 实习岗位深度解析【结合一次研发实习谈感受】
开发语言·c++·qt
sjmaysee1 小时前
Java框架SpringBoot(一)
java·开发语言·spring boot
azhou的代码园1 小时前
基于SpringBoot+微信小程序的图片识别科普系统
spring boot·后端·微信小程序
寒秋花开曾相惜1 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
想唱rap1 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
Tony Bai1 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
njidf1 小时前
C++与Qt图形开发
开发语言·c++·算法