使用go语言将单反斜杠改为双反斜杠的方法

 更新时间:2024年01月28日 10:46:40   作者:Jelly-小丑鱼  
最近开发的时候遇到这么个问题,就是在window上获取了文件目录的字段,然后将这个绝对路径保存到数据库,但是前端展示的时候路径的双反斜杠变成了单反斜杠,本文给大家介绍了使用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语言的,可能场景比较特殊,不是非常适用,也记录下来,方便后续查询。其实最开始的时候,比较困惑,因为打印出来就是单反斜杠,然后读出来用文件保存下来又是双反斜杠,还是折腾的比较久。最后经过查询,猜测,验证,终于明白了其中的关键,其实当时使用打印字符串的长度估计也能知道其中的蹊跷所在。

相关文章

  • go-zero源码阅读之布隆过滤器实现代码

    go-zero源码阅读之布隆过滤器实现代码

    布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难,这篇文章主要介绍了go-zero源码阅读-布隆过滤器,需要的朋友可以参考下
    2023-02-02
  • GO语言中的方法值和方法表达式的使用方法详解

    GO语言中的方法值和方法表达式的使用方法详解

    这篇文章主要介绍了GO的方法值和方法表达式的使用方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 详解Go中Map类型和Slice类型的传递

    详解Go中Map类型和Slice类型的传递

    这篇文章主要为大家详细介绍了Go中Map类型和Slice类型的传递,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • golang生成RSA公钥和密钥的实现方法

    golang生成RSA公钥和密钥的实现方法

    本文主要介绍了golang生成RSA公钥和密钥的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Systemd集成Golang二进制程序的方法

    Systemd集成Golang二进制程序的方法

    这篇文章主要介绍了Systemd集成Golang二进制程序的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • 一文详解Go语言io.LimitedReader类型

    一文详解Go语言io.LimitedReader类型

    这篇文章主要为大家介绍了Go语言io.LimitedReader类型示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Go并发同步Mutex典型易错使用场景

    Go并发同步Mutex典型易错使用场景

    这篇文章主要为大家介绍了Go并发同步Mutex典型易错使用场景示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Goland 断点调试Debug的操作

    Goland 断点调试Debug的操作

    这篇文章主要介绍了Goland 断点调试Debug的操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • go语言计算两个时间的时间差方法

    go语言计算两个时间的时间差方法

    这篇文章主要介绍了go语言计算两个时间的时间差方法,涉及Python操作时间的技巧,需要的朋友可以参考下
    2015-03-03
  • Golang Map value不可寻址使用指针类型代替示例详解

    Golang Map value不可寻址使用指针类型代替示例详解

    这篇文章主要为大家介绍了Golang Map value不可寻址使用指针类型代替示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论