代码规范能够让项目代码风格一致,并发现潜在的缺陷,提高研发效率。本篇博客将介绍 Golang 代码检查工具 golangci-lint ,及其在 GitHub Actions 上的配置。
golangci-lint
golangci-lint 是一款快速、高效的代码检查工具,支持自定义的检查规则,被广泛应用在各大开源项目中,如 Kubernetes、Beego 等。
Linter
Linter 是 golangci-lint 中很重要的一个概念,具体的代码检查规则是由 Linter 去实现的。通过执行 golangci-lint linters
命令,我们可以查看所有可支持的 Linter ,以及它们的启用状态。此外,官方也提供了 Linter 的支持列表及其说明。
配置文件
默认情况下,golangci-lint 会去识别根目录下的 .golangci.yml
文件,从中载入 Linter 的各项配置,以下是我常用的 Linter 配置:
linters:
disable-all: true
enable:
- deadcode
- dupl
- errcheck
- godot
- goimports
- gosimple
- govet
- ineffassign
- misspell
- revive
- staticcheck
- structcheck
- typecheck
- unused
- varcheck
GitHub Actions
GitHub Actions 是 GitHub 于 2018 年推出的持续集成服务,其定义了以下四种术语:
workflow
:指一次持续集成的过程。job
:一个workflow
可以完成一个或多个job
任务。step
:一个job
由一个或多个step
步骤构成。action
:一个step
可以依次执行一个或多个action
命令。
配置 Workflow
GitHub Actions 的配置文件,存在代码仓库的 .github/workflows
目录,采用 YAML 格式,后缀名为 .yml
。在该配置文件中,我们可以直接使用其他开发人员在 Actions 市场 上发布的 Action,这能够大大降低我们开发 Actions 的成本。golangci 团队在市场上提供了名为 golangci-lint-action@v2
的 Action ,我们可以直接使用它!
复制以下内容至 .github/workflows/golangci-lint.yml
文件,即可让我们的持续集成接入 golangci-lint 代码检查工具。
name: golangci-lint
on: [push, pull_request]
jobs:
golangci:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: golangci-lint
uses: golangci/golangci-lint-action@v2
with:
version: latest
在上述配置中,我们定义在 push
和 pull_request
事件发生时,就触发 golangci-lint 的持续集成。更多 CI 的触发事件,可查看官方文档。