添加 Lint
Lint 是分析源代码并查找、报告出有关编程风格、潜在错误和编码标准等问题的工具。术语 "lint" 源自一个名为 "lint" 的 Unix 实用工具,它用于识别 C 代码中的错误和缺陷。
在 Go 项目中项目中使用 linting 工具是一种最佳实践,它有助于保证代码质量并保持代码一致性。
有许多适用于 Go 的 linting 工具。其中比较流行的两个工具是 golangci-lint
和 Staticcheck
。在此项目中,我们将使用 golangci-lint
,毕竟它实际上是一个 Go linters 聚合器。
使用以下命令安装它:
# 二进制文件将位于 $(go env GOPATH)/bin/golangci-lint
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.55.2
golangci-lint --version
了解更多关于安装的信息:https://golangci-lint.run/usage/install/
在项目的根目录下创建一个名为 .golangci.yml
的文件。它用作 golangci-lint
的配置文件。
.golangci.yml:
linters:
enable:
- deadcode
- errcheck
- goimports
- golint
- govet
- ineffassign
- staticcheck
- structcheck
- typecheck
- unused
- lll
# 一些 linters 的自定义配置
linters-settings:
govet:
check-shadowing: true
golint:
min-confidence: 0.8
# 排除一些自动生成的文件或目录
exclude:
- vendor/
- generated/
# golangci-lint 的设置
golangci-lint:
build:
tags: testing
然后运行它:
golangci-lint run
你将得到一个 lint 问题的列表:
pkg/grep/search.go:68:15: Error return value of `filepath.Walk` is not checked (errcheck)
filepath.Walk(directoryPath, func(filePath string, info os.FileInfo, err error) error {
^
尝试修复所有问题,然后再次运行 golangci-lint
。
golangci-lint run
如果没有问题出现,那就意味着你的代码现在是 "风格优良" 的。
pkg/grep/search.go 中的更改:
@@ -65,7 +65,7 @@ func GrepCount(result MatchResult) int {
func GrepRecursive(pattern string, directoryPath string, options *Options) (MatchResult, error) {
results := make(MatchResult)
- filepath.Walk(directoryPath, func(filePath string, info os.FileInfo, err error) error {
+ err := filepath.Walk(directoryPath, func(filePath string, info os.FileInfo, err error) error {
if err != nil {
return nil
}
@@ -79,6 +79,9 @@ func GrepRecursive(pattern string, directoryPath string, options *Options) (Matc
}
return nil
})
+ if err != nil {
+ return nil, err
+ }
return results, nil
}