golangci-lint 命令找不到主因是 PATH 未正确配置;Mac 推荐 brew 安装,Linux/CI 需用官方脚本将二进制放至 $(go env GOPATH)/bin 并确保该路径在 PATH 中。

golangci-lint 命令找不到?PATH 和安装方式必须对齐
装完 golangci-lint 却提示 command not found,90% 是 PATH 没配对。Mac 用 brew install golangci-lint 最省心;Linux 或 CI 环境务必用官方脚本,并确保二进制落到了 $(go env GOPATH)/bin 下:
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1
接着检查 $(go env GOPATH)/bin 是否在 shell 的 PATH 里(echo $PATH 看一眼)。别信“装完就能用”,没进 PATH 就等于没装。
.golangci.yml 中 enable 和 disable 别混着写
enable 和 disable-all: true 是互斥策略,共存会静默失效——这不是 bug,是设计使然。推荐只用 enable 显式声明你真需要的 linter:
-
gofmt(格式强制统一) -
govet(基础语义检查) -
errcheck(忽略 error 的高频风险点) -
staticcheck(覆盖大部分逻辑缺陷,但别再加gosimple,二者重叠严重)
禁用规则别写在顶层 linters-settings 里,而要用 issues.exclude-rules 精准到文件或正则,比如跳过生成代码:- path: "_test\.go"。
立即学习“go语言免费学习笔记(深入)”;
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
CI 中 lint 失败却不中断?issues-exit-code 必须设为 1
默认情况下,golangci-lint run 报错仍返回 0,CI 就当一切正常。必须在 .golangci.yml 的 issues 段显式声明:
issues: exit-code: 1
同时避免在主干构建(如 main 分支)里加 --fast:它会跳过 unused 等耗时检查,导致漏报。PR 构建可开,主干构建必须全量。
GitHub Actions 里别用 go install 装 golangci-lint
CI 脚本里写 go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.59.1 是典型反模式——每次都要拉依赖、编译,Go 版本或 proxy 波动就失败。直接用官方 action:
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: v1.59.1
args: --config .golangci.yml它内部下载预编译二进制,不依赖 Go 环境,启动快、失败率低。注意 version 字段必须和本地开发用的版本一致,否则规则行为可能有差异。
真正容易被忽略的是 Go module 状态:CI 里 go build ./ 都过不了,golangci-lint 必定报一堆 undefined: xxx。确保 go.mod 已提交、GO111MODULE=on 已设、且没用 replace 指向本地未同步路径。

















