使用go語言將單反斜杠改為雙反斜杠的方法
問題
最近開發(fā)的時候遇到這么個問題,就是在window上獲取了文件目錄的字段,然后將這個絕對路徑保存到數據庫,最后前端需要請求的時候,就需要讀取數據庫存的文件目錄路徑給前端,前端要進行展示。但是前端展示的時候路徑的雙反斜杠變成了單反斜杠,然后問題來了,對于這個路徑我們有模糊查詢的功能,導致含有單反斜杠的模糊查詢無法正常查詢。
經過查詢多方資料和測試,發(fā)現反斜杠是屬于轉義字符,我查看數據庫和返回給前端的數據,里面的數據都是有兩個反斜杠的,但是前端顯示出來就只有一個,這個是屬于正常的,因為是字符串,兩個反斜杠,其中一個被認為是轉義字符,另一個被認為是字符串,所以只顯示一個反斜杠,但是關鍵字查詢的時候,用戶肯定是直接復制顯示的單個反斜杠的字符串,所以就導致了查詢不出來。
具體的現象如下所示:
1、現象描述
前面已經簡單說了情況,我數據庫里面存的是這樣子的:
C:\\Program Files\\WPS Office\\12.1.0.16250\\wtoolex\\wpsupdate.exe
但是你如果取出數據然后打印出來,他也是單反斜杠,因為打印的時候他認為兩個單反斜杠其中一個是轉義字符,但是數據庫里面本質是存的兩個反斜杠,你把數據取出來寫到文件里面看,就是兩個單反斜杠。
然后我發(fā)給前端,前端收到的也是雙反斜杠的,但是就顯示的就是單斜杠,所以查詢的時候考妣網頁顯示單反斜杠的路徑去模糊查詢是查詢不到的。
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語言的,可能場景比較特殊,不是非常適用,也記錄下來,方便后續(xù)查詢。其實最開始的時候,比較困惑,因為打印出來就是單反斜杠,然后讀出來用文件保存下來又是雙反斜杠,還是折騰的比較久。最后經過查詢,猜測,驗證,終于明白了其中的關鍵,其實當時使用打印字符串的長度估計也能知道其中的蹊蹺所在。
相關文章
Golang常見錯誤之值拷貝和for循環(huán)中的單一變量詳解
這篇文章主要給大家介紹了關于Golang常見錯誤之值拷貝和for循環(huán)中單一變量的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-11-11

