golangci-lint报“cannot find module providing package”是因module mode下依赖未初始化或未下载,需先确保go build或go list -m all成功,检查replace路径有效性,或用--no-config临时调试。

golangci-lint run 报 cannot find module providing package
这不是 lint 工具坏了,是它在 module mode 下严格按 go.mod 解析依赖,而你的本地环境还没完成模块初始化或依赖未下载。
- 先验证项目是否能正常构建:执行
go build -o /dev/null ./...或go list -m all,失败就别跑 lint —— lint 不会比编译器更宽容 - 检查
go.mod里是否有replace指向本地路径,确认该路径存在且含有效go.mod;若指向未git init的空目录,golangci-lint直接报错 - 临时调试可用
golangci-lint run --no-config跳过配置加载,看是否是.golangci.yml中某 linter(如goimports)触发了额外 import 导致失败
启用 staticcheck 却不报 SA1019(调用弃用 API)等高危问题
staticcheck 默认不启用,哪怕你写了 enable: ["staticcheck"],也得显式打开规则集,否则只跑极少数默认项。
初始化并管理阿里云SDK Go 客户端,涵盖 sync.Once 单例、goroutine 安全、endpoint 与 region 配置、VPC 端点及调试。
- 在
.golangci.yml中必须加linters-settings: staticcheck: checks: ["all"](Go 1.21+ 支持"all";旧版本需列具体 ID,如["SA1019", "SA1006"]) - 别信
golangci-lint init生成的配置——它默认禁用staticcheck,errcheck也不开,等于放行空指针、goroutine 泄漏、未处理 error - 检查是否被
run.skip-dirs误排除:比如写成skip-dirs: ["."]或正则匹配太宽,导致当前包没被扫描
VS Code 里没波浪线,但终端 golangci-lint run 有报错
不是插件没装,是 Go 扩展根本没调用 golangci-lint,而是 fallback 到 gopls 自带的简易检查。
- 在
.vscode/settings.json里硬写两行:"go.lintTool": "golangci-lint"和"go.lintOnSave": "package" - 加
"go.lintFlags": ["--concurrency=2", "--timeout=60s"]—— 大项目默认并发数吃光内存,静默失败,不报错也不标红 - 别依赖自动修复:
--fix只对gofumpt等少数 linter 生效,errcheck或staticcheck不支持,设了也白设
CI 流水线绿色通过,但其实一堆 unused/errcheck 错误
没设退出码,等于没门禁。Lint 发现问题后默认 exit 0,GitHub Actions 或 Jenkins 就当一切正常。
- CI 命令必须加
--issues-exit-code=1,例如:golangci-lint run --issues-exit-code=1 --out-format=github-actions - pre-commit 钩子里可加
--fix(仅限支持修复的 linter),但 CI 里禁用——格式化冲突会导致 PR 合并失败 - 跳过测试目录要写全:
skip-dirs: ["testdata", "mocks", "vendor"],否则sql.Rows在 mock 场景下被errcheck误报“资源未关闭”
.golangci.yml 用 init 生成却没补关键 linter、CI 里漏掉 --issues-exit-code=1。这三处任一缺失,静态检查就形同虚设。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










