網站首頁 編程語言 正文
1.?Golint
(1)安裝golint
git clone https://github.com/golang/lint.git
cd lint/golint
go install
(2)使用方式
# 檢查單個文件
golint service.go
# 檢查當前目錄所有.go文件,不會遞歸查找
golint
(3)golint校驗規則
- 不能使用下劃線命名法,使用駝峰命名法
- 外部可見程序結構體、變量、函數都需要注釋
- 通用名詞要求大寫 iD/Id -> ID Http -> HTTP Json -> JSON Url -> URL Ip -> IP Sql -> SQL
- 包命名統一小寫不使用駝峰和下劃線
- 注釋第一個單詞要求是注釋程序主體的名稱,注釋可選不是必須的
- 外部可見程序實體不建議再加包名前綴
- if語句包含return時,后續代碼不能包含在else里面
- errors.New(fmt.Sprintf(…)) 建議寫成 fmt.Errorf(…)
- receiver名稱不能為this或self
- receiver名稱不能為this或self
- 錯誤變量命名需以 Err/err 開頭
- a+=1應該改成a++,a-=1應該改成a--
(4)檢查的結果示例如下:
middlewares.go:29:6: exported type xxxInstrumentingMiddleware should have comment or be unexported
middlewares.go:41:1: error should be the last type when returning multiple items
middlewares.go:41:1: exported method xxxInstrumentingMiddleware.Creativexxx should have comment or be unexported
middlewares.go:88:1: error should be the last type when returning multiple items
middlewares.go:88:1: exported method xxxInstrumentingMiddleware.CreativexxxRTB should have comment or be unexported
middlewares.go:135:1: error should be the last type when returning multiple items
middlewares.go:135:1: exported method xxxInstrumentingMiddleware.UpdateConf should have comment or be unexported
middlewares.go:141:1: error should be the last type when returning multiple items
middlewares.go:141:1: exported method xxxInstrumentingMiddleware.GetConf should have comment or be unexported
middlewares.go:147:1: exported function NewWrappedxxxInstrumentingMiddleware should have comment or be unexported
middlewares.go:218:6: exported type xxxInstrumentingMiddleware should have comment or be unexported
middlewares.go:225:1: exported method xxxInstrumentingMiddleware.PredictGRPC should have comment or be unexported
middlewares.go:250:1: exported function NewxxxInstrumentingMiddleware should have comment or be unexported
middlewares.go:281:6: exported type xxxxxxInstrumentingMiddleware should have comment or be unexported
middlewares.go:288:1: exported method xxxxxxInstrumentingMiddleware.PredictGRPC should have comment or be unexported
middlewares.go:288:116: method parameter appId should be appID
middlewares.go:306:1: exported function NewxxxxxxInstrumentingMiddleware should have comment or be unexported
xxx_callee.go:1:1: package comment should be of the form "Package xxxservice ..."
xxx_callee.go:1:1: package comment should not have leading space
xxx_callee.go:1:1: package comment should be of the form "Package xxxservice ..."
xxx_callee.go:1:1: package comment should not have leading space
xxx_callee.go:1:1: package comment should be of the form "Package xxxservice ..."
xxx_callee.go:1:1: package comment should not have leading space
xxx_callee.go:38:96: method parameter appId should be appID
service.go:124:5: exported const xxxLevelLowerLimit should have comment (or a comment on this block) or be unexported
service.go:134:6: exported type xxxTdbankConfig should have comment or be unexported
service.go:138:6: exported type xxxConfig should have comment or be unexported
service.go:152:6: exported type xxxResponse should have comment or be unexported
service.go:162:6: exported type xxxMetaDataCache should have comment or be unexported
service.go:515:1: error should be the last type when returning multiple items
service.go:592:9: range var appId should be appID
service.go:604:16: range var appIdStr should be appIDStr
service.go:609:17: var appId should be appID
service.go:688:13: range var appId should be appID
service.go:801:13: range var appId should be appID
service.go:806:13: var behaviorGameIdList should be behaviorGameIDList
IDE集成工具參考:https://www.jb51.net/article/229273.htm
2.?Golangci-lint
(1)安裝golangci-lint
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.41.1
golangci-lint --version
(2)使用方式
# 檢查單個文件
golangci-lint run service.go
# 指定目錄
golangci-lint run internal/
# 檢查當前目錄所有.go文件,會遞歸查找當前目錄及子目錄
golangci-lint run
(3)golangci-lint校驗規則
golangci-lint運行時會在當前目錄查找配置文件
- golangci.yml
- .golangci.yaml
- .golangci.toml
- .golangci.json
具體配置參考:
https://golangci-lint.run/usage/configuration/
(4)檢查的結果示例如下,-v參數可以看到更詳細的檢查結果
# golangci-lint run -v service/service.go
INFO [config_reader] Config search paths: [./ /data/xxx/code/xxx/internal/xxx/service /data/xxx/code/xxx/internal/xxx /data/xxx/code/xxx/internal /data/xxx/code/xxx /data/xxx/code /data/xxx /data / /root]
INFO [lintersdb] Active 10 linters: [deadcode errcheck gosimple govet ineffassign staticcheck structcheck typecheck unused varcheck]
INFO [loader] Go packages loading at mode 575 (compiled_files|exports_file|name|types_sizes|deps|files|imports) took 448.248885ms
INFO [runner/filename_unadjuster] Pre-built 0 adjustments in 7.130535ms
INFO [linters context/goanalysis] analyzers took 4.744573ms with top 10 stages: buildir: 629.354μs, fact_deprecated: 514.772μs, inspect: 435.291μs, ctrlflow: 362.378μs, typedness: 353.563μs, printf: 345.2μs, SA5012: 345.028μs, fact_purity: 333.959μs, nilness: 333.457μs, isgenerated: 28.152μs
INFO [runner/max_same_issues] 1/4 issues with text "undeclared name: `ModelInstrumentingMiddleware`" were hidden, use --max-same-issues
INFO [runner/max_same_issues] 1/4 issues with text "undeclared name: `NewModelInstrumentingMiddleware`" were hidden, use --max-same-issues
INFO [runner] Issues before processing: 2608, after processing: 9
INFO [runner] Processors filtering stat (out/in): skip_files: 2608/2608, max_from_linter: 9/9, path_shortener: 9/9, path_prefixer: 9/9, skip_dirs: 2608/2608, identifier_marker: 2608/2608, exclude: 2608/2608, nolint: 2608/2608, diff: 11/11, max_per_file_from_linter: 11/11, severity-rules: 9/9, sort_results: 9/9, filename_unadjuster: 2608/2608, path_prettifier: 2608/2608, autogenerated_exclude: 2608/2608, exclude-rules: 2608/2608, source_code: 9/9, cgo: 2608/2608, uniq_by_line: 11/2608, max_same_issues: 9/11
INFO [runner] processing took 103.631607ms with stages: exclude-rules: 61.093674ms, identifier_marker: 32.814984ms, nolint: 7.481643ms, path_prettifier: 1.299346ms, skip_dirs: 217.899μs, uniq_by_line: 187.231μs, source_code: 145.003μs, filename_unadjuster: 132.84μs, cgo: 117.621μs, autogenerated_exclude: 93.646μs, max_same_issues: 37.831μs, path_shortener: 2.715μs, max_from_linter: 2.375μs, max_per_file_from_linter: 1.845μs, exclude: 621ns, severity-rules: 511ns, sort_results: 490ns, skip_files: 471ns, diff: 470ns, path_prefixer: 391ns
INFO [runner] linters took 434.383892ms with stages: goanalysis_metalinter: 330.666778ms
service/service.go:72:29: undeclared name: `ModelInstrumentingMiddleware` (typecheck)
? ? xxxService ? ? ? ? ? ?*ModelInstrumentingMiddleware
? ? ? ? ? ? ? ? ? ? ? ? ? ? ^
service/service.go:73:29: undeclared name: `ModelInstrumentingMiddleware` (typecheck)
? ? xxxCalibrationService *ModelInstrumentingMiddleware
? ? ? ? ? ? ? ? ? ? ? ? ? ? ^
service/service.go:74:29: undeclared name: `ModelInstrumentingMiddleware` (typecheck)
? ? xxxCalibrationService *ModelInstrumentingMiddleware
? ? ? ? ? ? ? ? ? ? ? ? ? ? ^
service/service.go:76:29: undeclared name: `xxxModelInstrumentingMiddleware` (typecheck)
? ? xxxService ? ? ? ? ? ? *xxxModelInstrumentingMiddleware
? ? ? ? ? ? ? ? ? ? ? ? ? ? ^
service/service.go:412:33: undeclared name: `NewModelInstrumentingMiddleware` (typecheck)
? ? ? ? xxxService: ? ? ? ? ? ?NewModelInstrumentingMiddleware(NewxxxService(logger), "xxx_MODEL"),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^
service/service.go:413:33: undeclared name: `NewModelInstrumentingMiddleware` (typecheck)
? ? ? ? xxxCalibrationService: NewModelInstrumentingMiddleware(NewxxxCalibrationService(logger), "xxx_CALIBRATION_MODEL"),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^
service/service.go:414:33: undeclared name: `NewModelInstrumentingMiddleware` (typecheck)
? ? ? ? xxxService: ? ? ? ? ? ?NewModelInstrumentingMiddleware(NewxxxService(logger), "xxx_MODEL"),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^
service/service.go:416:33: undeclared name: `NewxxxModelInstrumentingMiddleware` (typecheck)
? ? ? ? xxxService: ? ? ? ? ? ? NewxxxModelInstrumentingMiddleware(NewxxxService(logger), "xxx_MODEL"),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ^
service/service.go:448:17: undeclared name: `NewWrappedxxxInstrumentingMiddleware` (typecheck)
? ? wapedSvc := NewWrappedxxxInstrumentingMiddleware(svc)
? ? ? ? ? ? ? ? ^
INFO File cache stats: 1 entries of total size 183.6KiB
INFO Memory: 10 samples, avg is 70.1MB, max is 128.1MB
INFO Execution took 893.716ms
3. Go-reporter
github地址:https://github.com/qax-os/goreporter
1)安裝codestyle
# golang版本需要 >=1.6
yum -y install graphviz
go get -u github.com/360EntSecGroup-Skylar/goreporter
(2)使用方式
# 展示指令可用參數
goreporter -p [projectRelativePath] -r [reportPath] -e [exceptPackagesName] -f [json/html/text] {-t templatePathIfHtml}
-version Version of GoReporter.
-p Must be a valid Golang project path.
-r Save the path to the report.
-e Exceptional packages (multiple separated by commas, for example: "linters/aligncheck,linters/cyclo" ).
-f report format json, html OR text.
-t Template path,if not specified, the default template will be used.
By default, the default template is used to generate reports in html format.
原文鏈接:https://cloud.tencent.com/developer/article/2056397
相關推薦
- 2022-05-11 tomcat啟動時提示端口被占用解決辦法
- 2022-02-13 淺析ARMv8匯編指令adrp和adr_匯編語言
- 2022-04-30 DataGridView控件常用屬性介紹_C#教程
- 2022-03-20 詳解C語言的預處理效果_C 語言
- 2022-04-10 Android中shape的自定義藝術效果使用_Android
- 2022-06-12 如何在React項目中使用AntDesign_React
- 2023-10-15 獲取當天開始時間零點和結束時間24點的時間以及時間戳
- 2023-02-23 Python實現隨機生成一個漢字的方法分享_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支