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

在GitHub Actions中运行Go相关pre-commit脚本失败求助

解决GitHub Actions中pre-commit Go钩子工具找不到的问题

我在GitHub Actions里运行包含Go相关钩子的pre-commit脚本时,明明已经在pre-commit步骤前添加了goimports和golangci-lint的安装步骤,却还是提示找不到这两个工具。

当前配置文件

.pre-commit-config.yaml

repos:
- repo: https://github.com/dnephin/pre-commit-golang
  rev: v0.5.0
  hooks:
    - id: go-imports
    - id: golangci-lint
    - id: go-unit-tests

GitHub Action 配置文件

name: pre-commit

on:
  pull_request:
  push:
    branches: [main]
jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-python@v2
    - uses: actions/setup-go@v3
    - run: go install golang.org/x/tools/cmd/goimports@latest
    - run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.49.0
    - uses: pre-commit/action@v2.0.2

错误输出

[INFO] This may take a few minutes...
go imports...............................................................Failed
- hook id: go-imports
- exit code: 127

/home/runner/.cache/pre-commit/repow0byklud/run-go-imports.sh: line 8: goimports: command not found

golangci-lint............................................................Failed
- hook id: golangci-lint
- exit code: 127

/home/runner/.cache/pre-commit/repow0byklud/run-golangci-lint.sh: 2: exec: golangci-lint: not found

go-unit-tests............................................................Passed

问题原因

GitHub Actions中pre-commit的运行环境默认不包含Go的bin目录($(go env GOPATH)/bin),虽然手动安装了工具,但pre-commit进程找不到这些工具的路径。

解决方案

方案1:手动添加Go bin目录到PATH

在安装工具的步骤后,添加一步将Go的bin目录写入GitHub Actions的环境变量PATH中:

修改后的GitHub Action配置:

name: pre-commit

on:
  pull_request:
  push:
    branches: [main]
jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-python@v2
    - uses: actions/setup-go@v3
    - run: go install golang.org/x/tools/cmd/goimports@latest
    - run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.49.0
    - run: echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
    - uses: pre-commit/action@v2.0.2

方案2:让pre-commit自动安装依赖(推荐)

直接修改.pre-commit-config.yaml,给对应的钩子添加additional_dependencies,让pre-commit自动处理工具安装,无需手动在Action中配置:

修改后的.pre-commit-config.yaml:

repos:
- repo: https://github.com/dnephin/pre-commit-golang
  rev: v0.5.0
  hooks:
    - id: go-imports
      additional_dependencies: [golang.org/x/tools/cmd/goimports@latest]
    - id: golangci-lint
      additional_dependencies: [github.com/golangci/golangci-lint/cmd/golangci-lint@v1.49.0]
    - id: go-unit-tests

对应的GitHub Action配置可以简化为:

name: pre-commit

on:
  pull_request:
  push:
    branches: [main]
jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-python@v2
    - uses: actions/setup-go@v3
    - uses: pre-commit/action@v2.0.2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:20:43