先确认path未生效而非未安装;macos/linux运行which go,无输出则检查~/.zshrc中export path=$path:/usr/local/go/bin并source,windows在系统环境变量中添加c:\go\bin后重启终端。

go version 报 command not found 怎么办
根本不是没装好,是 PATH 没生效。别急着重装,先查终端是否真认得 go 命令。
- macOS/Linux:运行
which go,没输出就说明 shell 没加载到/usr/local/go/bin或你解压的路径;检查~/.zshrc(或~/.bash_profile)里有没有export PATH=$PATH:/usr/local/go/bin这类行,改完记得source ~/.zshrc - Windows:用 PowerShell 运行
Get-Command go,失败就去「系统属性 → 高级 → 环境变量」里确认C:\Program Files\Go\bin(或你自定义的GOROOT下的bin)进了用户或系统PATH;别信安装器勾选的“添加到 PATH”,重启终端才生效 - 统信 UOS 或某些 Linux 发行版可能默认没装 Go,先跑
apt install golang(UOS/Debian 系),再验证go env GOROOT是否指向正确位置
go mod init 失败但没报错,项目依赖不识别
静默失败最常见原因是模块模式被关了,或者残留旧结构干扰判断。
- 运行
go env -w GO111MODULE=on强制启用模块——Go 1.16+ 虽默认开启,但 CI 脚本、旧终端会话或手动设过GO111MODULE=off就会失效 - 删掉项目根目录下的
vendor/目录(除非你明确要 vendor 依赖);go mod init遇到vendor/可能跳过分析直接生成空或错乱的go.mod - 别在
$GOPATH/src下初始化新项目——go mod init会试图从路径推导 module 名,比如~/go/src/github.com/user/proj会生成github.com/user/proj,但若你实际想用example.com/proj就埋坑了;建议新建空目录,cd进去再go mod init example.com/proj
VS Code 里 gopls 启动失败、无代码提示
gopls 不是插件装上就跑,它依赖底层 go 命令可用 + 项目结构合规。
- 确保当前工作区有
go.mod文件(哪怕只是空文件),且文件后缀是.go;gopls对非 Go 文件或没模块的目录直接拒绝服务 - 检查
go是否在PATH中:VS Code 终端里跑go version,失败则编辑器启动时根本找不到go,gopls必挂 - 如果刚配完环境变量但 VS Code 是旧进程打开的,必须完全退出再重开——它不会自动 reload shell 环境
- 国内用户常卡在工具下载:打开 VS Code 设置,搜
go.goplsEnv,加一行"GOPROXY": "https://goproxy.cn,direct",避免gopls自己去拉依赖时超时
用 staticcheck 编写自定义静态检查规则
官方 staticcheck 不支持 runtime 注册规则,得用它的 SDK(honnef.co/go/tools)自己编译检查器,不是改配置那么简单。
- 不要试图往
.staticcheck.conf里加自定义 rule 字段——那只是开关已有规则,不接受新逻辑 - 核心路径:写一个
main.go,importhonnef.co/go/tools/lint和 AST 相关包,实现lint.Analyzer接口,在Run方法里遍历 AST 节点做判断;例如检查所有fmt.Printf是否带%v后缀,就得匹配CallExpr+ 函数名 + 第一个参数字符串字面量 - 编译后得到二进制,再通过
staticcheck -checks=your-checker-name调用;注意它和原生staticcheck是两个进程,CI 里要显式安装你的 checker - 性能敏感:AST 遍历别做全局正则或深递归,
staticcheck默认并发检查多个包,单个 analyzer 卡住会影响整体速度
go list -json 输出格式微调可能让 analyzer 解析失败,这类细节不跑真实项目根本暴露不出来。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











