
WSL2里装Go别用Windows版安装包
直接在WSL2里运行Windows的go1.22.4.windows-amd64.msi没用——它只会装进/mnt/c/下,WSL2的shell根本找不到go命令。你得用Linux原生方式装。
实操建议:
- 用
curl -OL https://go.dev/dl/go1.22.4.linux-amd64.tar.gz下载Linux二进制包(注意路径里是linux-amd64,不是windows-amd64) - 解压到
/usr/local:sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz - 把
/usr/local/go/bin加进$PATH,写进~/.bashrc或~/.zshrc:export PATH=$PATH:/usr/local/go/bin - 重启shell后运行
go version确认生效,输出应为go version go1.22.4 linux/amd64
常见错误现象:装完go命令仍报command not found,大概率是PATH没生效,或误用了Windows路径。
GOROOT和GOPATH别硬设,除非真需要
Go 1.16+默认开启module模式,GOROOT指向/usr/local/go即可,不用额外配置;GOPATH也只在老项目或本地开发依赖时才需显式设。
立即学习“go语言免费学习笔记(深入)”;
实操建议:
-
GOROOT一般不用动,go env GOROOT能验证是否正确指向/usr/local/go - 如需自定义
GOBIN(比如把go install生成的二进制放~/bin),加一行export GOBIN=$HOME/bin并确保$HOME/bin在PATH里靠前 - 避免在
~/.bashrc里写export GOPATH=$HOME/go——现代项目基本靠go.mod管理依赖,硬设反而容易触发cannot find module providing package
性能影响:乱设GOROOT可能导致go build反复扫描路径;错配GOBIN会让go install生成的工具找不到。
WSL2文件系统性能差?Go编译慢就换位置
在/mnt/c/Users/xxx下跑go build可能比在/home/xxx慢3–5倍,因为NTFS挂载层有开销,尤其涉及大量小文件读写(如go mod download、go test)。
实操建议:
- 所有Go项目放在WSL2原生文件系统里,比如
~/projects/myapp,别放/mnt/c/下 -
go mod download首次拉依赖时,确保当前目录在/home分区;如果已拉到/mnt/c缓存,删掉~/go/pkg/mod再重拉(go env GOMODCACHE可查路径) - 编辑器(如VS Code)连WSL2时,打开文件夹必须选WSL2路径(地址栏显示
WSL: Ubuntu),否则会走Windows文件系统桥接
常见错误现象:go test -v ./...卡住十几秒才开始跑,大概率是测试文件在/mnt/c下触发了跨文件系统同步。
go run太慢?关掉实时杀毒扫描
Windows Defender默认监控/mnt/c,但有时会误扫WSL2的/tmp或/home临时目录(尤其go run生成的临时二进制),导致毫秒级延迟累积成秒级卡顿。
实操建议:
- 在Windows端用PowerShell执行:
Add-MpPreference -ExclusionPath "\wsl$Ubuntuhome"(把Ubuntu换成你的WSL发行版名) - 或者更稳妥:在WSL2里用
go build -o ./bin/app . && ./bin/app代替go run main.go,绕过临时文件生成 - 检查
go env GOCACHE是否指向/home/xxx/.cache/go-build——如果还在/mnt/c下,用go env -w GOCACHE=$HOME/.cache/go-build重设
容易被忽略的地方:WSL2里go run慢,很多人先怀疑Go配置,其实90%是Windows杀软在后台拦着。关了再试,立竿见影。











