Docs Vault

在代码开发完成后,除了通过单元测试对功能进行验证外,还需要执行静态代码检查,以发现功能之外的代码问题。静态代码检查能够检测代码中的不规范问题、安全风险、潜在缺陷、性能问题、圈复杂度以及重复代码,通过这些检查,可以有效提高代码质量,确保其符合规范及最佳实践。


本节课就来介绍下,如何对 Go 代码进行静态代码检查。


静态代码工具选择


执行静态代码检查推荐的方式是借助静态代码检查工具对代码进行分析。目前,Go 语言提供了多种工具,例如 vet、golangci-lint、go-tools、go-critic 等,这些工具能够检查常见问题,比如格式错误、不规范的代码逻辑和潜在的运行问题。此外,一些企业会制定公司级的代码规范并开发自定义静态检查工具,


尽管静态代码检查工具繁多,但集成过多工具可能会带来配置和维护成本高、检查结果冗余、执行时间增加以及工具不一致的问题。幸运的是,Go 生态中有许多静态代码检查工具,其中 golangci-lint 整合了多种其他静态检查工具。作为 Go 生态中最受欢迎的静态代码检查工具,golangci-lint 也被用于 miniblog 项目的代码静态检查。


如何执行静态代码检查工具?



选择静态代码检查工具后,可以通过多种方式运行,例如在命令行直接执行、集成到 Makefile 中、集成到 CI/CD 平台中,或嵌入 IDE 运行。在实际开发中,可以根据需要,选择合适的运行方式。


miniblog 项目将静态代码检查工具集成到 Makefile 中,通过 make lint 命令来执行静态代码检查。通过在本地执行 make lint,开发者可以轻松进行静态代码检查。同时,将 make lint 集成到 CI/CD 平台,在持续集成过程中运行检查,由于本地和平台使用相同的命令,可以确保检查结果的一致性,避免检查结果不匹配的问题。此外,这种方式还能规范所有开发者的操作,统一检查流程,提升静态代码检查的便捷性和一致性。


golangci-lint 安装和配置



golangci-lint 的官方文档内容详尽,关于其使用方法,可以参考官方文档。


要使用 golangci-lint,首先需要安装该工具,安装命令如下:

$ go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest


安装完成后,建议配置 golangci-lint 的自动补全功能以提升使用效率,配置命令如下:

$ golangci-lint completion bash > $HOME/.golangci-lint.bash  
$ if ! grep -q .golangci-lint.bash $HOME/.bashrc; then echo "source $HOME/.golangci-lint.bash" >> $HOME/.bashrc; fi  
$ bash


安装完成后,需配置 golangci-lint。golangci-lint 提供了丰富的配置选项,主要包括以下几类功能:

  1. 配置 golangci-lint 本身的选项,例如超时时间、并发数、是否检查 *_test.go 文件等;
  2. 配置需要忽略的文件和文件夹;
  3. 配置启用和禁用的 linter;
  4. 配置输出格式。


此外,golangci-lint 支持多种 linter,其中部分 linter 提供了特定的配置项,这些配置项可以在配置文件中进行设置,例如:指定哪些文件可以忽略哪些 linter、设置错误严重级别等。


miniblog 项目的 golangci-lint 配置文件位于 feature/s31 分支的仓库根目录,文件名为 .golangci.yaml


提示:
使用最新版本的 golangci-lint 可能导致现有配置失效或出现错误。因此,建议定期查看 golangci-lint 的发布说明(release notes),根据需要更新版本并调整配置。



miniblog 静态代码检查



miniblog 项目将静态代码检查工具集成在 Makefile 文件中。修改 Makefile 文件,添加 lint 规则来进行静态代码检查,Makefile 代码实现如下:

...
all: tidy format lint build add-copyright
...
.PHONY: lint
lint: # 执行静态代码检查.
    @echo "===========> Running golangci to lint source codes"
    @golangci-lint run -c $(PROJ_ROOT_DIR)/.golangci.yaml $(PROJ_ROOT_DIR)/...

添加 Makefile 规则后,可以通过以下命令对 miniblog 项目代码进行静态检查:

$ make lint


小结(AI 自动生成并人工审核)


本文介绍了如何在 Go 项目中通过静态代码检查提升代码质量,以确保其符合规范和最佳实践。


静态代码检查能够发现代码中的不规范问题、安全风险和潜在缺陷,是单元测试的重要补充。文章重点推荐了 golangci-lint 这一工具,因其整合了多种静态检查工具,具备高效、全面的检查能力,并已在 miniblog 项目中集成。


通过将 golangci-lint 配置到 Makefile 中,开发者可以通过简单的命令(如 make lint)在本地或 CI/CD 平台上执行一致的静态检查,规范开发流程并提升效率。


同时,文章还强调了工具的安装和配置方法,提醒开发者关注工具版本更新以保持配置的有效性。这种集成方式不仅提升了代码检查的便捷性,还确保了检查结果的统一性和可靠性。