| asciicheck | 检查代码中是否有非ascii码值 | bugs、style |
| bidichk | 检查危险的unicode字符序列,一般写代码触发比较少 | bugs |
| bodyclose | 检查http response是否成功关闭 | performance、bugs |
| contextcheck | 检查函数是否使用非继承的context ,即没有继承内置context的context | bugs |
| 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,去掉没有用的import | format、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 |
| makezero | slice初始化的时候,不要固定长度 | style |
| maligned | 该仓库已经被archived,用govet的fieldlignment替代 | performance |
| misspell | 检查英文单词错误 | style、comment |
| nakedret | 函数有返回,使用了返回命名,返回时,有些有返回,有没有使用默认值 | style |
| nestif | 检查深度嵌套的if语句 | complexity |
| nilerr | 检查代码中是否有为nil的err返回,即上层返回了err,检查完err后,直接返回了nil | bugs |
| nilnil | 返回两个参数,一个数据,一个是err,两个都是nil,不是推荐的 | style |
| nlreturn | 在return之前,空格一行,表明不同的代码分段 | style |
| noctx | 检查发送request请求时,是否没有context.Context | performanace, bugs |
| nolintlint | nolint指令(对整个文件不进行lint分析),该工具就是发现 格式不对或者不充分的nolint | style |
| paralleltest | 检查测试代码中是否缺失Parallel函数 | style、test |
| prealloc | 检查slice是否被提前被分配空间 | perfomance |
| promlinter | 检查prometheus metrics的命令是否规范 | style |
| revive | 替换golint的,更加快捷,可配置,可扩展性强,更加平滑,更加漂亮 | style、metalinter |
| rowserrcheck | sql执行的检查,检查sql.Rows.Err是否被检查 | bugs、sql |
| scopelint | 仓库已经archived,由exportlooppref替换 | bugs |
| sqlclosecheck | 检查sql.Rows和sql.Stmt是否被关闭 | bugs、sql |
| stylecheck | golint的替代 | 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 |