Golang高效pre-commit钩子实现代码风格检查

Golang高效pre-commit钩子实现代码风格检查 在生产环境中使用Golang时,您觉得哪些预提交钩子非常有用? 我在代码中添加了一些,但一直没能找到一个能强制使用驼峰命名法而非蛇形命名法的钩子。

3 回复

几乎所有的编辑器都会在保存时对你的代码执行 gofmt。我从未在实际代码中见过蛇形命名法。这很可能更多是代码审查/风格规范层面的问题。

更多关于Golang高效pre-commit钩子实现代码风格检查的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Brajesh_Chandra:

在生产环境中使用 Golang 时,您发现哪些预提交钩子非常有用? 我在代码中添加了几个,但一直没找到一个能强制使用驼峰命名法而非蛇形命名法的钩子。

你在预提交钩子中是否使用了任何特定的工具或库(例如 golangci-lintgo fmtgofmt),并且是否探索过它们针对命名约定的自定义选项?

对于强制使用驼峰命名法,推荐使用 revive 配合自定义规则。以下是一个配置示例:

// .revive.toml
ignoreGeneratedHeader = true
severity = "warning"
confidence = 0.8

[rule.var-naming]
  arguments = [["^[a-z][a-zA-Z0-9]*$", "驼峰命名"]]

安装与配置:

# 安装 revive
go install github.com/mgechev/revive@latest

# .pre-commit-config.yaml
repos:
  - repo: local
    hooks:
      - id: revive
        name: revive
        entry: revive
        args: ["-config", ".revive.toml", "./..."]
        language: system
        files: \.go$

另一个常用钩子是 golangci-lint,它集成了多个检查工具:

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/golangci/golangci-lint-pre-commit
    rev: v1.54.2
    hooks:
      - id: golangci-lint
        args: ["--enable", "var-naming"]

对于生产环境,建议组合使用以下钩子:

repos:
  - repo: https://github.com/pre-commit/mirrors-go-fmt
    rev: v1.20.4
    hooks:
      - id: go-fmt
  - repo: https://github.com/dnephin/pre-commit-golang
    rev: v0.5.0
    hooks:
      - id: go-mod-tidy
      - id: go-unit-tests
      - id: go-build

执行效果:

$ git commit -m "test"
revive................................................Failed
- hook id: revive
- exit code: 1

main.go:10:2: var-naming: 驼峰命名

这些配置会强制检查变量命名,拒绝蛇形命名提交。

回到顶部