使用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语言中slice的用法实例分析

    Go语言中slice的用法实例分析

    这篇文章主要介绍了Go语言中slice的用法,实例分析了slice的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Go语言学习之链表的使用详解

    Go语言学习之链表的使用详解

    链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。本文将详细为大家介绍Go语言中链表的使用,感兴趣的可以了解一下
    2022-04-04
  • Golang Redis连接池实现原理及示例探究

    Golang Redis连接池实现原理及示例探究

    这篇文章主要为大家介绍了Golang Redis连接池实现示例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • goland中使用leetcode插件实现

    goland中使用leetcode插件实现

    本文主要介绍了goland中使用leetcode插件实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Go语言Http Server框架实现一个简单的httpServer

    Go语言Http Server框架实现一个简单的httpServer

    这篇文章主要为大家介绍了Go语言Http Server框架实现一个简单的httpServer抽象,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • golang sql连接池的实现方法详解

    golang sql连接池的实现方法详解

    database/sql是golang的标准库之一,它提供了一系列接口方法,用于访问关系数据库。下面这篇文章主要给大家介绍了关于golang sql连接池用法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧
    2018-09-09
  • 浅析Go语言版本的forgery

    浅析Go语言版本的forgery

    使用过Python语言的朋友们可能使用过 forgery_py ,它是一个伪造数据的工具。这篇文章主要介绍了Go语言版本的forgery,需要的朋友可以参考下
    2018-08-08
  • Go语言使用字符串的几个技巧分享

    Go语言使用字符串的几个技巧分享

    这篇文章中小编将给出一些Go语言在处理字符串方面的技巧,对大家学习Go语言具有一定的参考借鉴价值,下面一起看看吧。
    2016-09-09
  • Go语言计算指定年月天数的方法

    Go语言计算指定年月天数的方法

    这篇文章主要介绍了Go语言计算指定年月天数的方法,实例分析了Go语言操作时间的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Golang基础学习之map的示例详解

    Golang基础学习之map的示例详解

    哈希表是常见的数据结构,有的语言会将哈希称作字典或者映射,在Go中,哈希就是常见的数据类型map,本文就来聊聊Golang中map的相关知识吧
    2023-03-03

最新评论