使用go語(yǔ)言將單反斜杠改為雙反斜杠的方法
問(wèn)題
最近開(kāi)發(fā)的時(shí)候遇到這么個(gè)問(wèn)題,就是在window上獲取了文件目錄的字段,然后將這個(gè)絕對(duì)路徑保存到數(shù)據(jù)庫(kù),最后前端需要請(qǐng)求的時(shí)候,就需要讀取數(shù)據(jù)庫(kù)存的文件目錄路徑給前端,前端要進(jìn)行展示。但是前端展示的時(shí)候路徑的雙反斜杠變成了單反斜杠,然后問(wèn)題來(lái)了,對(duì)于這個(gè)路徑我們有模糊查詢的功能,導(dǎo)致含有單反斜杠的模糊查詢無(wú)法正常查詢。
經(jīng)過(guò)查詢多方資料和測(cè)試,發(fā)現(xiàn)反斜杠是屬于轉(zhuǎn)義字符,我查看數(shù)據(jù)庫(kù)和返回給前端的數(shù)據(jù),里面的數(shù)據(jù)都是有兩個(gè)反斜杠的,但是前端顯示出來(lái)就只有一個(gè),這個(gè)是屬于正常的,因?yàn)槭亲址?,兩個(gè)反斜杠,其中一個(gè)被認(rèn)為是轉(zhuǎn)義字符,另一個(gè)被認(rèn)為是字符串,所以只顯示一個(gè)反斜杠,但是關(guān)鍵字查詢的時(shí)候,用戶肯定是直接復(fù)制顯示的單個(gè)反斜杠的字符串,所以就導(dǎo)致了查詢不出來(lái)。
具體的現(xiàn)象如下所示:
1、現(xiàn)象描述
前面已經(jīng)簡(jiǎn)單說(shuō)了情況,我數(shù)據(jù)庫(kù)里面存的是這樣子的:
C:\\Program Files\\WPS Office\\12.1.0.16250\\wtoolex\\wpsupdate.exe
但是你如果取出數(shù)據(jù)然后打印出來(lái),他也是單反斜杠,因?yàn)榇蛴〉臅r(shí)候他認(rèn)為兩個(gè)單反斜杠其中一個(gè)是轉(zhuǎn)義字符,但是數(shù)據(jù)庫(kù)里面本質(zhì)是存的兩個(gè)反斜杠,你把數(shù)據(jù)取出來(lái)寫(xiě)到文件里面看,就是兩個(gè)單反斜杠。
然后我發(fā)給前端,前端收到的也是雙反斜杠的,但是就顯示的就是單斜杠,所以查詢的時(shí)候考妣網(wǎng)頁(yè)顯示單反斜杠的路徑去模糊查詢是查詢不到的。
2、解決辦法
當(dāng)時(shí)我想到的解決辦法有兩種,一種就是讓前端直接顯示全部的字符串,即顯示兩個(gè)反斜杠的字符串,然后用戶到時(shí)候直接復(fù)制來(lái)進(jìn)行模糊查詢即可,前端的處理方法我目前不知道咋個(gè)實(shí)現(xiàn),應(yīng)該還是可以實(shí)現(xiàn)的,我做后端的,這里講下我后端怎么實(shí)現(xiàn)的:
后端的實(shí)現(xiàn)方法就是將原來(lái)的單反斜杠給他變成雙反斜杠,我之前找了很久,一直沒(méi)找到實(shí)現(xiàn)的方法,最后無(wú)意中找到了,使用fmt.Sprintf就可以實(shí)現(xiàn)。具體實(shí)現(xiàn)代碼如下所示
strjelly := `C:\jelly\path` strjelly = fmt.Sprintf("%#v", strjelly) num := len(strjelly) fmt.Println(num) fmt.Println(strjelly) fmt.Println(strjelly[1 : num-1])
代碼中,假設(shè)你的字符串變量是strjelly,字符串里面含有兩個(gè)單反斜杠,然后經(jīng)過(guò)fmt.Sprintf("%#v", strjelly)處理后,里面的單反斜杠就會(huì)變成雙反斜杠,但是這樣轉(zhuǎn)換后不能直接用,因?yàn)檫@樣轉(zhuǎn)換后,他會(huì)前后多字符串引號(hào),需要使用strjelly[1 : num-1])把前后的兩個(gè)引號(hào)字符給去掉,具體的打印如下所示:
17
"C:\\jelly\\path"
C:\\jelly\\path
可以看到,經(jīng)過(guò)fmt.Sprintf處理后,字符串的長(zhǎng)度多了4,原來(lái)的字符串?dāng)?shù)一下是13,為什么多個(gè)4呢,因?yàn)檗D(zhuǎn)換后兩個(gè)單反斜杠變成了雙反斜杠,增加了2,然后前后多了一個(gè)引號(hào),增加了2,一共就是增加了4。然后再使用strjelly[1 : num-1]去掉前后的兩個(gè)引號(hào)即可。
3、總結(jié)
以上就是記錄的單反斜杠轉(zhuǎn)雙反斜杠的記錄,本方法是針對(duì)go語(yǔ)言的,可能場(chǎng)景比較特殊,不是非常適用,也記錄下來(lái),方便后續(xù)查詢。其實(shí)最開(kāi)始的時(shí)候,比較困惑,因?yàn)榇蛴〕鰜?lái)就是單反斜杠,然后讀出來(lái)用文件保存下來(lái)又是雙反斜杠,還是折騰的比較久。最后經(jīng)過(guò)查詢,猜測(cè),驗(yàn)證,終于明白了其中的關(guān)鍵,其實(shí)當(dāng)時(shí)使用打印字符串的長(zhǎng)度估計(jì)也能知道其中的蹊蹺所在。
相關(guān)文章
Golang使用pprof檢查內(nèi)存泄漏的全過(guò)程
pprof 是golang提供的一款分析工具,可以分析CPU,內(nèi)存的使用情況,本篇文章關(guān)注它在分析內(nèi)存泄漏方面的應(yīng)用,本文給大家介紹了Golang使用pprof檢查內(nèi)存泄漏的全過(guò)程,文中通過(guò)代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02GoLang channel底層代碼實(shí)現(xiàn)詳解
Channel和goroutine的結(jié)合是Go并發(fā)編程的大殺器。而Channel的實(shí)際應(yīng)用也經(jīng)常讓人眼前一亮,通過(guò)與select,cancel,timer等結(jié)合,它能實(shí)現(xiàn)各種各樣的功能。接下來(lái),我們就要梳理一下GoLang channel底層代碼實(shí)現(xiàn)2022-10-10golang中snappy的使用場(chǎng)合實(shí)例詳解
在java 和go語(yǔ)言 大字符傳達(dá)的時(shí)候, 采用snappy 壓縮 解壓縮是最好的方案。下面這篇文章主要給大家介紹了關(guān)于golang中snappy使用場(chǎng)合的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12Golang 語(yǔ)言極簡(jiǎn)類型轉(zhuǎn)換庫(kù)cast的使用詳解
本文我們通過(guò) cast.ToString() 函數(shù)的使用,簡(jiǎn)單介紹了cast 的使用方法,除此之外,它還支持很多其他類型,在這沒(méi)有多多介紹,對(duì)Golang 類型轉(zhuǎn)換庫(kù) cast相關(guān)知識(shí)感興趣的朋友一起看看吧2021-11-11Golang常見(jiàn)錯(cuò)誤之值拷貝和for循環(huán)中的單一變量詳解
這篇文章主要給大家介紹了關(guān)于Golang常見(jiàn)錯(cuò)誤之值拷貝和for循環(huán)中單一變量的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11Golang?單元測(cè)試和基準(zhǔn)測(cè)試實(shí)例詳解
這篇文章主要為大家介紹了Golang?單元測(cè)試和基準(zhǔn)測(cè)試實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08