启用commitlint后Go项目运行goanalysis_metalinter报错求助
错误信息
bodyclose: failed prerequisites: analysis skipped: errors in package: [/Users/me/Work/go-template/project/svc/pkg/config/config.go:5:2: could not import os (/usr/local/go/src/os/dir.go:8:2: could not import io/fs (/usr/local/go/src/io/fs/fs.go:11:2: could not import internal/oserror
排查解决步骤
核对Go版本一致性
internal/oserror是Go 1.16及以后版本才有的内部包,先执行go version查看本地安装的Go版本,再对比项目根目录go.mod文件开头的go 1.xx版本号。如果两者不一致,要么升级本地Go版本到项目要求的版本,要么用go mod edit -go=1.xx调整项目的Go版本声明,确保环境和项目版本匹配。修复本地Go SDK完整性
提示找不到标准库内部包,大概率是本地Go SDK损坏或不完整。直接重新下载对应版本的Go安装包覆盖安装,或者先执行go clean -cache清理缓存,再运行go mod tidy让Go重新梳理依赖。检查Go Modules配置
进入项目根目录,执行go mod tidy自动整理所有依赖引用。如果项目之前用GOPATH模式,现在切换到Modules,要确保GO111MODULE环境变量开启:Linux/macOS执行export GO111MODULE=on,Windows执行set GO111MODULE=on。排查commitlint的潜在冲突
临时禁用commitlint的Git钩子(删除项目.git/hooks/commit-msg文件),再重新运行goanalysis_metalinter。如果错误消失,说明是commitlint的配置或依赖影响了Go环境,尝试重新安装commitlint相关包,或者降级到兼容的版本。清理linter缓存
如果你用的是golangci-lint这类集成了goanalysis_metalinter的工具,执行golangci-lint cache clean清理缓存,再重新运行golangci-lint run测试。
内容的提问来源于stack exchange,提问作者HexaCrop

