当前位置:网站首页>Go代码检查工具
Go代码检查工具
2022-07-25 18:43:00 【Luoyger】
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 behaviorGameIDListIDE集成工具参考:https://blog.csdn.net/qq_38712932/article/details/108108784
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.716ms3. 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.边栏推荐
- 7. Dependency injection
- Osmosis extends its cross chain footprint to poca through integration with axelar and moonbeam
- You can change this value on the server by setting the 'Max_ allowed_ Packet 'variable error
- Tensor to img & imge to tensor (tensor conversion of pytorch)
- 怎么禁止使用360浏览器(怎么才能把自带的浏览器停用)
- 中信证券低佣金开户免5是真的吗,安全吗
- 通讯录(一)
- 【华为机试真题】字符串匹配
- Dynamic memory management
- 给生活加点惊喜,做创意生活的原型设计师丨编程挑战赛 x 选手分享
猜你喜欢

Project: serial port receiving RAM storage TFT display (complete design)

Interview shock: why does TCP need three handshakes?

进程间的通信(管道通信)

With a market value of 30billion yuan, the largest IPO in Europe in the past decade was re launched on the New York Stock Exchange

关爱一线防疫工作者,浩城嘉业携手高米店街道办事处共筑公益长城

动态内存管理

JVM基础和问题分析入门笔记

解决You can change this value on the server by setting the ‘max_allowed_packet‘ variable报错

推特收购舆论战,被马斯克变成了小孩吵架

什么是3DE体验平台
随机推荐
【翻译】LFX 2022年春季导师资格开放--2月13日前申请CNCF项目!
Detailed introduction and application of GaN (comprehensive and complete)
Osmosis extends its cross chain footprint to poca through integration with axelar and moonbeam
7/24 训练日志
Vc/pe is running towards Qingdao
什么是hpaPaaS平台?
2022 robocom provincial competition solution
Typescript对象代理器Proxy使用
通讯录(一)
年轻时代,噢,年轻时代
There are several browser cores. How to upgrade if the browser version is too low
Project: serial port receiving RAM storage TFT display (complete design)
[QNX hypervisor 2.2 user manual]9.4 dryrun
Advanced software testing - test classification
With a market value of 30billion yuan, the largest IPO in Europe in the past decade was re launched on the New York Stock Exchange
Disk performance and capacity
ServletConfig class and ServletContext class
Interpretation of "cross chain interconnection smart contract"
#yyds干货盘点# 面试必刷TOP101:反转链表
中信证券低佣金开户免5是真的吗,安全吗