golang之代码检查工具golangci-lint

日常开发中,想要保证工程中代码能够正常运行, 一般都会使用vet进行代码静态扫描, 但是每次手动执行命令有点不太方便,如果在每次开发完成之后,git提交的时候都进行下检查就OK了,想好就干!!!

 

这里使用golangci-lint这个包: https://golangci-lint.run

golangci-lint 是一个代码检查工具的集合,聚集了多种 Go 代码检查工具,如 golintgo 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-commitprepare-commit-msgcommit-msgpost-commit等,主要用于控制客户端git的提交工作流。服务端钩子:pre-receivepost-receiveupdate,主要在服务端接收提交对象时、推送到服务器之前调用。

注意,以 .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提交的时候, 对于循环导包的问题无法验证到? 估计是执行命令的时候参数有问题, 这个后期再看下

 

posted @ 2023-08-17 12:51  X-Wolf  阅读(932)  评论(0编辑  收藏  举报