You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang运行pre-commit hook报named files must be .go files错误

问题原因

你的配置存在三个问题,导致钩子执行逻辑和你手动在终端运行命令不一致:

  • 缺少pass_filenames: false配置:pre-commit默认会把所有匹配规则的文件路径追加到你写的entry命令末尾,你定义的命令实际执行时会变成staticcheck -tests=false ./... [文件1路径] [文件2路径]...,这些自动追加的文件路径就是报错的直接来源。
  • types: [text]匹配规则错误:这个规则会命中仓库内所有文本类型文件,包括yaml、markdown、各类配置文件等非Go后缀的文件,staticcheck只接受.go后缀的文件作为入参,遇到这些非Go文件就会抛出named files must be .go files的报错,你看到多行重复报错,就是因为每匹配到一个非Go文件就会触发一次报错提示。
  • language: golang配置不符合预期:这个配置会让pre-commit在独立的隔离环境中运行Go程序,不会调用你本地终端已经装好的staticcheck,和你手动执行命令的环境不统一。
修复方案

如果你要复用本地已经安装好的staticcheck,保持和手动执行命令完全一致的行为,把.pre-commit-config.yaml里的对应配置改成如下内容即可:

repos:
- repo: local
  hooks:
    - id: static-checks-pramod
      name: Static Analysis
      description: This hook does static analysis
      entry: staticcheck -tests=false ./...
      language: system
      types: [go]
      pass_filenames: false

改动点说明:

  • 将language从golang改为system:直接调用本地系统环境中安装的staticcheck,和你手动在终端执行命令的环境完全一致。
  • 将types从[text]改为[go]:仅匹配Go源码文件,过滤掉所有无关类型的文件。
  • 新增pass_filenames: false:禁止pre-commit自动往命令末尾追加文件路径,完全按照你定义的entry命令执行,不会出现多余参数。

修改完成后重新执行pre-commit run --all-files即可正常运行。

内容的提问来源于stack exchange,提问作者pramod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:06:27