首頁 > 軟體

Go原始碼字串規範檢查lint工具strchecker使用詳解

2022-06-24 10:00:46

1.背景

在大型專案開發過程中,經常會遇到列印大量紀錄檔,輸出資訊和在原始碼中寫註釋的情況。對於軟體開發來說,我們一般都是列印輸出英文的紀錄檔(主要考慮軟體在各種環境下的相容性,如果列印中文紀錄檔可能會出現亂碼,另外英文紀錄檔更容易搜尋,更容易後續做國際化),但是對於我們中國人來說,很容易就把中文全形的中文標點符號一不注意就寫到紀錄檔中了。不過原始碼中的註釋因為是完全面向開發者的,不會面向客戶,所以如果研發團隊全是中國人,那麼程式碼註釋用中文就更有效率。

在實際開發過程中,確實就發現了列印紀錄檔中包含了中文標點的情況,但是如果我們直接用中文標點在IDE中進行全文搜尋,就好發現大量的程式碼註釋使用中文標點,而到底哪裡是紀錄檔列印時的中文標點,哪裡是註釋中的中文標點,根本看不出來。於是我參考golangci-lint的程式碼掃描檢查功能,寫了一個Go原始碼中字串規範檢查的lint工具:strchecker。原始碼放在:https://github.com/studyzy/go-strchecker

2.strchecker介紹

strchecker可以掃描某個資料夾或者該資料夾下的所有子資料夾中的go程式碼,並對其中的go程式碼進行語法分析,構建語法樹,找到其中申明的常數、變數、函數引數、返回值、賦值、case語句等場景下的字串string型別,然後對這些字串進行正則匹配。系統預設的正則匹配方式是隻有ASCII字元才是合法字元,只要超過一個位元組的(比如中文、中文標點等都是多位元組的)就會被匹配到,而匹配到的字串就算是非法字串,並最終將這些非法字串列印出來。

下面舉一個範例:

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.輸出結果如下:

/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: ":)


IT145.com E-mail:sddin#qq.com