最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go源碼字符串規(guī)范檢查lint工具strchecker使用詳解

 更新時間:2022年06月24日 08:47:06   作者:深藍studyzy  
這篇文章主要為大家介紹了Go源碼字符串規(guī)范檢查lint工具strchecker使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

1.背景

在大型項目開發(fā)過程中,經(jīng)常會遇到打印大量日志,輸出信息和在源碼中寫注釋的情況。對于軟件開發(fā)來說,我們一般都是打印輸出英文的日志(主要考慮軟件在各種環(huán)境下的兼容性,如果打印中文日志可能會出現(xiàn)亂碼,另外英文日志更容易搜索,更容易后續(xù)做國際化),但是對于我們中國人來說,很容易就把中文全角的中文標點符號一不注意就寫到日志中了。不過源碼中的注釋因為是完全面向開發(fā)者的,不會面向客戶,所以如果研發(fā)團隊全是中國人,那么代碼注釋用中文就更有效率。

在實際開發(fā)過程中,確實就發(fā)現(xiàn)了打印日志中包含了中文標點的情況,但是如果我們直接用中文標點在IDE中進行全文搜索,就好發(fā)現(xiàn)大量的代碼注釋使用中文標點,而到底哪里是日志打印時的中文標點,哪里是注釋中的中文標點,根本看不出來。于是我參考golangci-lint的代碼掃描檢查功能,寫了一個Go源碼中字符串規(guī)范檢查的lint工具:strchecker。源碼放在:https://github.com/studyzy/go-strchecker

2.strchecker介紹

strchecker可以掃描某個文件夾或者該文件夾下的所有子文件夾中的go代碼,并對其中的go代碼進行語法分析,構(gòu)建語法樹,找到其中申明的常量、變量、函數(shù)參數(shù)、返回值、賦值、case語句等場景下的字符串string類型,然后對這些字符串進行正則匹配。系統(tǒng)默認的正則匹配方式是只有ASCII字符才是合法字符,只要超過一個字節(jié)的(比如中文、中文標點等都是多字節(jié)的)就會被匹配到,而匹配到的字符串就算是非法字符串,并最終將這些非法字符串打印出來。

下面舉一個示例:

1.安裝strchecker

go install github.com/studyzy/go-strchecker/cmd/strchecker@latest

2.找到我們要進行掃描的文件夾,這里就以go-strchecker/testdata/ 這個文件夾為例,進行非法字符串掃描。

strchecker $GOPATH/src/github.com/studyzy/go-strchecker/testdata

3.輸出結(jié)果如下:

/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/call.go:9:60 has invalid string: "!"
/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/call.go:10:11 has invalid string: "a!b"
/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/call.go:11:5 has invalid string: "aa!"
/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/call.go:12:40 has invalid string: "bb!"
/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/main.go:10:30 has invalid string: "not found!"
/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/main.go:12:17 has invalid string: "no,data!"
/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/main.go:15:14 has invalid string: "Hello,World!"
/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/main.go:16:12 has invalid string: "Current time:"
/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/main.go:19:15 has invalid string: "???"
/Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/main.go:20:15 has invalid string: "にほんご"
 /Users/devinzeng/go/src/github.com/studyzy/go-strchecker/testdata/main.go:22:14 has invalid string: ":) ??????"

如果是在Goland這樣的IDE中的,那么我們就可以直接點擊源碼路徑,定位到具體的代碼位置了。

5.然后對其中的字符串進行修復(fù),將其中的中文標點替換成英文標點。

6.如果我們有一些特殊的要求,而不是只允許ASCII碼表中的內(nèi)容才是合法內(nèi)容,比如我們允許中英文,但是不允許日文、韓文等,那么怎么辦?于是我在參數(shù)中預(yù)置了ASCII表允許和ASCII+中文+中文標點允許這兩種常用的匹配類型。如果我們想允許ASCII和中文,那么命令是:

strchecker -invalid-type=1 ./testdata/...

【注意:這里最后的...表示testdata目錄下的所有子文件和子文件夾,會遞歸的掃描,當然因為我們testdata沒有子文件夾,所以這個...加或者不加都是一樣的?!?/p>

輸入結(jié)果為:

testdata/main.go:19:15 has invalid string: "???"
testdata/main.go:20:15 has invalid string: "にほんご"
testdata/main.go:22:14 has invalid string: ":) ????"

3.結(jié)論

strchecker是一個專門用于掃描Golang源碼中字符串是否包含特定正則表達式的Lint工具。使用strchecker可以快速找到Go源碼中字符串中隱藏的中文標點、非中英文字符等,很適合用于國人在大型go項目中掃描日志輸出或者其他字符串定義時不小心出現(xiàn)的中文標點的情況。

當然,如果本身項目的源碼中連注釋都不允許用中文和中文標點,那么就直接用IDE的search功能即可,本工具是不掃描源碼中注釋的內(nèi)容的。

以上就是Go源碼字符串規(guī)范檢查lint工具strchecker使用詳解的內(nèi)容,更多關(guān)于Go源碼規(guī)范檢查lint工具strchecker的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • golang變量uint、int大小溢出后的結(jié)果方式

    golang變量uint、int大小溢出后的結(jié)果方式

    在Go語言中,變量的大小溢出后,`uint`類型會回繞到最小值,而`int`類型會回繞到最大值的相反數(shù),例如,`uint8`溢出后會變成0,`int64`溢出后會變成最小的負數(shù)
    2024-12-12
  • 詳解MongoDB?Go?Driver如何記錄日志

    詳解MongoDB?Go?Driver如何記錄日志

    這篇文章主要為大家介紹了MongoDB?Go?Driver如何記錄日志詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • goquery 入門(安裝使用教程)

    goquery 入門(安裝使用教程)

    這篇文章主要為大家介紹了goquery 入門(安裝使用)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • 詳解go 中的 fmt 占位符

    詳解go 中的 fmt 占位符

    這篇文章主要介紹了go 中的 fmt 占位符,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • Go語言學(xué)習(xí)之文件操作方法詳解

    Go語言學(xué)習(xí)之文件操作方法詳解

    這篇文章主要為大家詳細介紹了Go語言中一些常見的文件操作,文中的示例代碼講解詳細,對我們學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下
    2022-04-04
  • 在Go語言中實現(xiàn)DDD領(lǐng)域驅(qū)動設(shè)計實例探究

    在Go語言中實現(xiàn)DDD領(lǐng)域驅(qū)動設(shè)計實例探究

    本文將詳細探討在Go項目中實現(xiàn)DDD的核心概念、實踐方法和實例代碼,包括定義領(lǐng)域模型、創(chuàng)建倉庫、實現(xiàn)服務(wù)層和應(yīng)用層,旨在提供一份全面的Go DDD實施指南
    2024-01-01
  • Go語言變量與基礎(chǔ)數(shù)據(jù)類型詳情

    Go語言變量與基礎(chǔ)數(shù)據(jù)類型詳情

    Go 是靜態(tài)(編譯型)語言,是區(qū)別于解釋型語言的弱類型語言(靜態(tài):類型固定,強類型:不同類型不允許直接運算),下面文章將對其進行詳細介紹,需要的朋友可以參考一下
    2021-09-09
  • Golang文件讀寫操作詳情

    Golang文件讀寫操作詳情

    這篇文章主要介紹了Golang文件讀寫操作詳情,文件是數(shù)據(jù)源(保存數(shù)據(jù)的地方)的一種,文件最主要的作用就是保存數(shù)據(jù),文件在程序中是以流的形式來操作的,更多詳細內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • Go語言的匿名字段實現(xiàn)組合復(fù)用實例探究

    Go語言的匿名字段實現(xiàn)組合復(fù)用實例探究

    這篇文章主要為大家介紹了Go語言的匿名字段實現(xiàn)組合復(fù)用實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • GoLand編寫 TCP 端口掃描器的詳細過程

    GoLand編寫 TCP 端口掃描器的詳細過程

    TCP,也就是傳輸控制協(xié)議(Transmission Control Protocol),這篇文章主要介紹了Go語言(Golang)編寫 TCP 端口掃描器,需要的朋友可以參考下
    2023-05-05

最新評論

集贤县| 阳西县| 西丰县| 明水县| 海城市| 海伦市| 泰顺县| 修水县| 南充市| 略阳县| 曲阳县| 临沭县| 西贡区| 浦江县| 周口市| 炉霍县| 凤山县| 宜君县| 舟曲县| 台东市| 隆安县| 当雄县| 湘潭县| 克东县| 融水| 桃园县| 宁海县| 合作市| 台山市| 长沙县| 虎林市| 三原县| 宁德市| 吉隆县| 阳高县| 乌苏市| 昌都县| 调兵山市| 铅山县| 勃利县| 和硕县|