使用golangci进行代码规范校验
# 命令
# golang lint
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.53.3
go mod vendor
golangci-lint run
1
2
3
4
2
3
4
# demo
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# 参考
上次更新: 2023-07-24 10:14:45