先确认安装方式和path是否生效:windows用msi安装会自动加c:\go\bin到path,但需关闭所有旧终端再新开;若go version无输出,运行echo %path%检查路径是否存在,不存在则手动添加并重启终端。

go version 没输出?先确认安装方式和 PATH 是否生效
Windows 上用 .msi 安装包(推荐新手)会自动把 C:\Go\bin 加进系统 PATH,但安装完必须**关闭所有已打开的 CMD/PowerShell 窗口再重开**,否则环境变量不加载。Linux/macOS 手动解压后,得自己把 ~/go/bin 或 /usr/local/go/bin 加进 ~/.zshrc 或 ~/.bashrc,然后执行 source ~/.zshrc。
常见错误现象:go version 报 “command not found” 或 “不是内部或外部命令”。别急着重装,先运行 echo $PATH(Linux/macOS)或 echo %PATH%(Windows),看输出里有没有包含 go 的 bin 目录路径。
- Windows 用户如果用的是
.zip包,需手动设置GOROOT=C:\go,并把%GOROOT%\bin加进PATH - Linux 用户若用 root 解压到
/opt/go,记得给/opt/go/bin加进全局PATH(改/etc/profile),否则普通用户仍找不到go - macOS M1/M2 芯片用户注意:下载时选
arm64版本,别用amd64,否则go version可能直接崩溃
GOPATH 还要手动配吗?Go 1.16+ 默认关掉了
从 Go 1.16 开始,GO111MODULE 默认为 on,项目只要含 go.mod 文件,就走模块模式,不再依赖 GOPATH/src 目录结构。你现在可以在任意路径下新建项目,go mod init myapp 之后,go run . 就能跑起来 —— GOPATH 对日常开发基本没影响了。
但仍有两个例外场景需要留意:
-
go install命令仍会把编译出的二进制放到$GOPATH/bin(哪怕你没设GOPATH,Go 也会 fallback 到$HOME/go/bin),所以得确保这个目录在PATH里,否则装完命令没法全局调用 - 某些老教程或 CI 脚本硬编码了
$GOPATH/src路径,遇到这类情况,要么改脚本,要么临时设GOPATH兼容(不推荐长期用) -
GOROOT依然必须存在且正确,它是 Go 工具链自身代码位置,go env GOROOT能查到;乱设会导致go tool类命令失效
多目录编译:go build -o 和 go run . 的行为差异
go run 是“运行时编译”,只生成临时二进制,不落地文件;go build 是“显式编译”,默认生成同名可执行文件(如 main.go → main)。两者对目录结构的处理逻辑不同,容易踩坑。
假设你有如下结构:
myproject/
├── cmd/
│ └── server/
│ └── main.go
└── internal/
└── handler/
└── handler.go
想编译 cmd/server 下的程序:
- 错:在
myproject/根目录下执行go build cmd/server—— 它会尝试编译整个模块,但找不到入口(除非cmd/server是独立 module) - 对:进入
cmd/server目录,执行go build -o ../bin/server .,或直接go run . - 更安全:根目录下用
go build -o bin/server ./cmd/server,路径必须以./开头,否则 Go 会当成 import path 处理 -
go run不支持跨目录指定多个main包,go run ./cmd/server ./cmd/cli会报错 “multiple packages”
国内拉包失败?GOPROXY 必须配,且不能只配一个
不配代理的话,go get 或 go mod download 会直连 proxy.golang.org,99% 情况超时或 403。光设 GOPROXY=https://goproxy.cn 也不够稳 —— 它偶尔会同步延迟或挂掉。
正确做法是用 fallback 机制:
- 执行
go env -w GOPROXY=https://goproxy.cn,https://proxy.golang.org,direct -
direct表示当所有代理都找不到包时,才回源官方地址(此时可能失败,但至少试过了) - 别漏掉
go env -w GO111MODULE=on,否则go mod命令压根不生效 - 验证是否生效:
go env GOPROXY应输出完整 fallback 链;go mod download github.com/gorilla/mux能快速完成即 OK
模块缓存路径($GOMODCACHE)默认在 $GOPATH/pkg/mod,但实际位置由 go env GOMODCACHE 决定,清理时别硬删目录,用 go clean -modcache 更安全。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











