go命令报错“command not found”是PATH未配置,非未安装;Go 1.16+需go mod init初始化模块;go build默认按main函数所在文件名生成可执行文件;国内需设置GOPROXY=https://goproxy.cn,direct。

go version 命令报错或显示“command not found”
说明 go 命令没进系统 PATH,不是 Go 没装好,而是路径没配对。Windows 安装 MSI 包时勾选“Add Go to PATH”就能自动搞定;macOS 用 Homebrew 装完也默认生效;Linux 手动解压的用户最容易踩这个坑——/usr/local/go/bin 必须显式加到 PATH 里。
检查方法:echo $PATH(macOS/Linux)或 echo %PATH%(Windows CMD),确认输出里含 /usr/local/go/bin 或 C:\Go\bin。
- Linux/macOS:编辑
~/.bashrc或~/.zshrc,追加export PATH=$PATH:/usr/local/go/bin - Windows PowerShell:运行
[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Go\bin", "User") - 改完别忘了
source ~/.zshrc或重启终端,否则不生效
go run main.go 报错 “cannot find module”
这是 Go 1.16+ 默认启用模块模式后的典型提示,不是代码写错了,是项目还没初始化模块。Go 不再强制要求把代码放在 $GOPATH/src 下,但必须有 go.mod 文件才能识别为模块。
解决只需一步:go mod init example.com/hello(模块名可任意,只要符合域名格式,比如 myproj 也行)。
立即学习“go语言免费学习笔记(深入)”;
- 执行后生成
go.mod,内容含module example.com/hello和 Go 版本声明 - 后续
go run main.go、go build就能正常工作 - 如果项目已有依赖,
go mod tidy会自动补全并下载
go build 后没有生成可执行文件,或生成名字不对
go build 默认生成的文件名,取决于当前目录下 main 包里的 func main() 所在文件名,而不是 main.go 这个名字本身。更关键的是:它只在当前目录生成,不会自动放到 $GOPATH/bin ——那是 go install 的行为。
- 想生成指定名字:
go build -o myapp main.go - 想让可执行文件进
$GOBIN(通常是$GOPATH/bin):go install,但前提是模块名已设且GOBIN在 PATH 中 - 跨平台编译(比如 macOS 上编译 Linux 二进制):
GOOS=linux GOARCH=amd64 go build -o myapp-linux main.go
国内拉包超时或“proxy.golang.org refused”
官方代理 https://proxy.golang.org 在国内基本不可用,这不是网络问题,是策略性屏蔽。必须换国内镜像代理,否则 go mod download、go get 全卡住。
推荐设置:go env -w GOPROXY=https://goproxy.cn,direct(Windows/macOS/Linux 都适用)。
-
direct表示对私有模块(如公司内网 Git 地址)直连,不走代理 - 别用已停服的
goproxy.io,现在goproxy.cn稳定且同步及时 - 顺带建议开启模块:
go env -w GO111MODULE=on,避免老式 GOPATH 模式干扰
真正容易被忽略的点是:环境变量修改后,新开终端才生效;IDE(如 VS Code)可能缓存旧环境,需要重启窗口或重载窗口。


















