当前位置: 首页 > 工具软件 > GolangCI-Lint > 使用案例 >

golangci-lint检查项说明

尹乐邦
2023-12-01

golangci-lint

说明

  1. 集成各项golang的静态检查工具
  2. 英文原版说明地址
  3. 内容涉及到编码风格(style)、错误处理(error)、会导致代码(bugs)、检查测试代码(test)、metalinter、sql相关判断(sql)、影响性能(performance)、圈复杂度(complexity)、注释(comment)、包引用(import)、模块管理(module)、代码格式化(format)

默认启动检查工具

名字描述预设作用
deadcode发现未使用的代码unused
indeffassign检查没有使用参数unused
structcheck检查没有使用的struct的元素项unused
unused检查没有使用的go代码,包含没有使用的常量、变量、函数、和类型unused
varcheck检查没有使用的全局的变量和常量unused
errcheck检查没有判断err的场景,这些没有检查的场景可能导致致命bug在某些场景bugs、error
gosimple简化代码style
govet检查源代码、报告可疑的结构体,如果Printf函数调用,参数没有对齐字符串格式bugs、metalinter
staticcheck专业做静态检查的工具,其它的工具只是一个简单的github仓库bugs、metalinter
typecheck类似编译的前端,解析和检查typebugs

默认不启用的检查工具(-E/–enable)

名字描述预设作用
asciicheck检查代码中是否有非ascii码值bugs、style
bidichk检查危险的unicode字符序列,一般写代码触发比较少bugs
bodyclose检查http response是否成功关闭performance、bugs
contextcheck检查函数是否使用非继承的context ,即没有继承内置context的contextbugs
cyclop检查函数和包的循环复杂度complexity
depguard检查包引用是否在可以接受的包列表中
dogsled检查赋值是否有过多的空识别体(如x,_, := f())style
dulp检查代码抄袭检查
durationcheck检查两个duration相乘是否超过了安全范围bugs
errname检查err的定义规范,有个公约:types类型的定义是以Error结尾的,常量的定义是Err打头的style
errorlintt检查可用于查到会导致Go 1.13中引入的错误包封装方案而出现的代码问题bugs
exhaustive(全面的)检查switch的全面性,以免遗漏场景bugs
exhaustivestruct检查结构体的元素项是否都初始化了bugs
exportloopref检查循环中是否有指针环境变量bugs
forbidigo被禁止的特定标识符style
forcetypeassert强制类型断言,检查interface转换有没有进行类型校验style
funlen检查长函数,默认是60行,40条语句complexity
gci控制golang的包引用总是按序且稳定的format,import
gochecknoglobals检查没有全局变量style
gocognit检查函数的复杂度,有具体的计算公式,具体可以查看对应代码仓库的README说明complexity
goconst检查是否有需要使用const代替的strings类型style
gocritic高可扩展性的go源码linter,特性:超过100中以上的诊断项style、metalinter
gocycle检查和检查函数的圈复杂度complexity
godot检查评论是否以句号结尾style、comment
godox检查代码中的FIXME、TODO和其它评论关键字style、comment
goerr113检查errors处理表达式style、comment
gofmt检查代码是否被gofmt过了format
gofumpt检查代码是否gofumpt(比gofmt更加严格的format工具)过了format
goheader检查license头部是否满足格式要求style
goimports格式化imports,去掉没有用的importformat、import
golint是一个github仓库, 已经被作者设置成archived状态了,被revive替代style
gomnd检查魔鬼数字style
gomoddirectives管理go.mod文件里面的replace(替换)、retract(收回)、excludes(排除)指令,特性:禁止所有的replace指令style
gomodguard允许和阻止的列表对于go mod的间接依赖style、import、module
goprintffuncname检查类似printf的函数是否以f结尾style
gosec检查源代码是否有安全问题,通过AST的方式bugs
ifshort检查if语句是否使用的简单的语法style
importas强制一致性的import别名
interfacer仓库已经被归档style
ireturn接受接口,返回具体的类型,而不是接口,具体可以看下对应仓库下面的用例style
III检查长语句style
makezeroslice初始化的时候,不要固定长度style
maligned该仓库已经被archived,用govet的fieldlignment替代performance
misspell检查英文单词错误style、comment
nakedret函数有返回,使用了返回命名,返回时,有些有返回,有没有使用默认值style
nestif检查深度嵌套的if语句complexity
nilerr检查代码中是否有为nil的err返回,即上层返回了err,检查完err后,直接返回了nilbugs
nilnil返回两个参数,一个数据,一个是err,两个都是nil,不是推荐的style
nlreturn在return之前,空格一行,表明不同的代码分段style
noctx检查发送request请求时,是否没有context.Contextperformanace, bugs
nolintlintnolint指令(对整个文件不进行lint分析),该工具就是发现 格式不对或者不充分的nolintstyle
paralleltest检查测试代码中是否缺失Parallel函数style、test
prealloc检查slice是否被提前被分配空间perfomance
promlinter检查prometheus metrics的命令是否规范style
revive替换golint的,更加快捷,可配置,可扩展性强,更加平滑,更加漂亮style、metalinter
rowserrchecksql执行的检查,检查sql.Rows.Err是否被检查bugs、sql
scopelint仓库已经archived,由exportlooppref替换bugs
sqlclosecheck检查sql.Rows和sql.Stmt是否被关闭bugs、sql
stylecheckgolint的替代style
tagliatelle检查struct的tags的格式style
tenv检查go1.17的版本是否使用os.Setenv替换t.Setenv,在测试代码中直接使用t.SetEnv即可style、test
testpackage使用分开的*_test的包目录,如果是测试代码的话style、test
thelper检查帮助函数里面没有调用t.Helper()函数style、test
tparallel检查测试代码中对于t.Parallel函数使用不恰当的测试代码style、test
unconvert去掉没有必要的type转换style
unparam上报没有使用的函数参数unused
varnamelen检查变量名字的长度在它自己的域内,生命周期越短,命名可以简短style
wastedassign非必要的赋值语句style
whitespace检查头部和尾部的空格style
wrapcheck检查外部包返回的err是否封装过,应对的是同一个包被不同的函数调用,不知道哪里出错了,应该封装一下style、error
wsl强制使用空行,使代码分段,利于理解style

通过配置的方式进行配置

 类似资料: