linters:
disable-all: true # 关闭其他linter
enable: # 下面是开启的linter列表,之后的英文注释介绍了相应linter的功能
# 进制使用非ASCII字符
- asciicheck
- bidichk
# 降低代码复杂度
- cyclop
- gocognit
- gocyclo
- maintidx
# 高可拓展性的go源码linter
- gocritic
# 禁止保留未使用的代码块
#---------------------------------------
#- deadcode
# The linter 'deadcode' is deprecated (since v1.49.0) due to: The owner seems to have abandoned the linter
# 新版本的linter已经不建议使用deadcode了,不使用的代码不会被报错了
#---------------------------------------
- ineffassign
# 减少代码拷贝
- dupl
# 禁止两个time.Duration类型相乘
- durationcheck
# 所有err都要处理
- errcheck
# 在Go 1.13之后使用errors.Wrap可能导致的问题
- errorlint
# 检查switch的全面性,以免遗漏场景
- exhaustive
# 禁止将for-range value的指针暴露给外部
- exportloopref
# 禁止使用特定的标识符
- forbidigo
# 禁止出现长函数
- funlen
# 控制golang的包引用的顺序
- gci
# 禁止使用全局变量 --需要使用 //nolint:gochecknoglobals // 说明原因
- gochecknoglobals
# 禁止使用init函数
- gochecknoinits
# 如果有相同的string变量请使用consts替换
- goconst
# 检查if语句是否有简单的语法
- ifshort
# 禁止出现长语句
- lll
# struct禁止包含context.Context字段
- containedctx
# 返回两个参数,一个数据,一个是err,禁止两个都是nil
- nilnil
# 禁止使用Sprintf去构造URL中的host和port
- nosprintfhostport
# 如果知道slice大小,定义时需分配空间
- prealloc
# 检查prometheus meteics的指标名是否规范
- promlinter
# 强制要求const/import/var在一个组
- grouper
# 检查go1.17的版本是否使用os.Setenv替换t.Setenv
- tenv
# 检查变量名长度
- varnamelen
# 强制一致性的impotr别名
- importas
# 类型断言时需检查是否成功
- forcetypeassert
# 保证类型、常量、变量和函数的声明顺序和数量
- decorder
# 检查err的定义规范--types类型的定义是以Error结尾的,常量的定义是Err打头的
- errname
# SQL Query方法错误检查
- execinquery
# 禁止errors使用'=='和'!='等表达式--与nil和io.EOF比较除外
- goerr113
# 官方代码格式化
- gofmt
- gofumpt
- goimports
# 禁止使用魔法数字
- gomnd
# 检查依赖的黑白名单
- gomodguard
# 检查类似printf的函数是否以f结尾
- goprintffuncname
# 安全检查
- gosec
# 官方错误检查
- govet
# 检查拼写错误
- misspell
# 如果函数过长,禁用裸返回
- nakedret
# 禁止深度嵌套的if语句
- nestif
# 如果使用nolint指令需要给出理由-- //nolint:gochecknoglobals // 原因
- nolintlint
# 禁止使用Go关键字命名
- predeclared
# 去掉没有必要的type转换
- unconvert
# 强制使用空行
- wsl
# 检查文件头部和尾部的换行
- whitespace
# 替换golint的
- revive
# 测试代码使用*_test的包目录
- testpackage
# 启用并行测试
- paralleltest
# 检查帮助函数里面有没有调用t.Helper()函数
- thelper
linters-settings:
errcheck:
check-type-assertions: true # 检查类型断言
check-blank: true # 检查使用 _ 来处理错误
errorlint:
errorf: true # 检查fmt.Errorf错误是否用%w
exhaustive:
check-generated: false # 不检查生成的文件
default-signifies-exhaustive: false # 不检查是否有default
funlen:
lines: 65 # 一个函数总行数限制
statements: 40 # 检查函数中语句的数量
gci:
sections:
- standard # 标准库
- default # 默认按字典顺序排序
- prefix(cos/lobbyplatform) # 特殊前缀的包
gomodguard: # 检查依赖的黑白名单
allowed:
# List of allowed modules.
# Default: []
modules:
- gopkg.in/yaml.v2
# List of allowed module domains.
# Default: []
domains:
- golang.org
blocked:
# List of blocked modules.
# Default: []
modules:
# Blocked module.
- github.com/uudashr/go-module:
# Recommended modules that should be used instead. (Optional)
recommendations:
- golang.org/x/mod
# Reason why the recommended module should be used. (Optional)
reason: "`mod` is the official go.mod parser library."
# List of blocked module version constraints.
# Default: []
versions:
# Blocked module with version constraint.
- github.com/mitchellh/go-homedir:
# Version constraint, see https://github.com/Masterminds/semver#basic-comparisons.
version: "< 1.1.0"
# Reason why the version constraint exists. (Optional)
reason: "testing if blocked version constraint works."
# Set to true to raise lint issues for packages that are loaded from a local path via replace directive.
# Default: false
local_replace_directives: false