golang之代码检查工具golangci-lint
日常开发中,想要保证工程中代码能够正常运行, 一般都会使用vet进行代码静态扫描, 但是每次手动执行命令有点不太方便,如果在每次开发完成之后,git提交的时候都进行下检查就OK了,想好就干!!!
这里使用golangci-lint这个包: https://golangci-lint.run
golangci-lint
是一个代码检查工具的集合,聚集了多种 Go 代码检查工具,如 golint
、go vet
等。
优点:
- 运行速度快
- 可以集成到 vscode、goland 等开发工具中
- 包含了非常多种代码检查器
- 可以集成到 CI 中
涉及linter: https://golangci-lint.run/usage/linters/
[安装]
# binary will be $(go env GOPATH)/bin/golangci-lint curl -sSfL https://raw.githubusercontent.com/Goci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.42.1 golangci-lint --version
更多命令:
# 查看版本 golangci-lint version # 查看linter golangci-lint help linters # 执行检查操作, 可指定目录 golangci-lint run [dir ...] # golangci-lint 可以通过 -E/--enable 去开启指定 linter,或者 -D/--disable 禁止指定 linter。 1golangci-lint run --disable-all -E errcheck 如上命令代表的就是除了 errcheck 的 linter,禁止其他所有的 linter 生效。 # golangci-lint 还可以通过 -p/--preset 指定一系列 linter 开启。 1golangci-lint run -p bugs -p error 如上命令代表的就是所有属于 bugs 和 error 分类的 linter 生效。 更多可以 golangci-lint run -h
[配置文件]
当前工作目录下添加配置文件,加载顺序:
-
golangci.yml
-
.golangci.yaml
-
.golangci.toml
-
.golangci.json
在 golangci-lint 官方文档 https://golangci-lint.run/usage/configuration/#config-file 中,提供了一个示例配置文件,非常地详细,在这其中包含了所有支持的选项、描述和默认值。
使用 pre-commit hook
在项目开发中,我们都会使用到 git,因此我们可以将代码静态检查放在一个 git 触发点上,而不用每次写完代码手动去执行 golangci-lint run
命令。这里,我们就需要用到 git hooks。
git hooks
git hooks 是 git 的一种钩子机制,可以让用户在 git 操作的各个阶段执行自定义的逻辑。git hooks 在项目根目录的 .git/hooks
下面配置,配置文件的名称是固定的,实质上就是一个个 shell 脚本。根据 git 执行体,钩子被分为客户端钩子和服务端钩子两类。
客户端钩子包括:pre-commit
、prepare-commit-msg
、commit-msg
、post-commit
等,主要用于控制客户端git的提交工作流。服务端钩子:pre-receive
、post-receive
、update
,主要在服务端接收提交对象时、推送到服务器之前调用。
注意,以 .sample 结尾的文件名是官方示例,这些示例脚本是不会执行的,只有重命名后才会生效(去除 .sample 后缀)。
[pre-commit]
试想,如果我们同时开发多个项目,也许项目的所采用的的编程语言并不一样,那么它们所需要的 git hooks 将不一致,此时我们是否要手动给每个项目都配置一个单独的 pre-commit 脚本呢,或者我们是否要去手动下载每一个钩子脚本呢。
实际上,并不需要这么麻烦。这里就引出了 pre-commit 框架,它是一个与语言无关的用于管理 git hooks 钩子脚本的工具
安装:
pip install pre-commit
# 查看版本
pre-commit --version
添加配置文件: .pre-commit-config.yaml
# 快速生成配置文件
pre-commit sample-config
查看支持的hooks: https://pre-commit.com/hooks.html
例如:
1repos: 2- repo: https://github.com/golangci/golangci-lint 3 rev: v1.41.1 # the current latest version 4 hooks: 5 - id: golangci-lint
安装git hook脚本
pre-commit install
将会安装到 .git/hooks/pre-commit
之后执行代码提交的时候, 就会自动触发并检查代码了
[集成到goland]
1.安装插件 Go Linter
2.添加文件监听 tool > file watchers + 添加刚才的插件golangci-lint
遇到的问题:
1.使用git提交的时候, 对于循环导包的问题无法验证到? 估计是执行命令的时候参数有问题, 这个后期再看下