真装好了需三步闭环验证:下载匹配架构的二进制包(uname -m查aarch64/x86_64)、显式配置goroot=/usr/local/go且$goroot/bin置于path开头、设置goproxy=https://goproxy.cn,direct;仅go version成功不算数。

直接下 go1.22.5.linux-amd64.tar.gz(或 linux-arm64.tar.gz)解压到 /usr/local,配好 GOROOT 和 PATH 顺序,再设 GOPROXY=https://goproxy.cn,direct,三步闭环验证成功——这才是真装好了。只跑通 go version 不算数。
怎么选对二进制包,避免 cannot execute binary file: Exec format error
错误不是 Go 报的,是内核拒绝加载——说明架构错了。别猜,先查:
-
uname -m输出aarch64→ 必须用go1.22.5.linux-arm64.tar.gz - 输出
x86_64→ 用go1.22.5.linux-amd64.tar.gz - 下载后别急着解压,
file /path/to/go/bin/go看输出里有没有ARM aarch64或x86-64字样 - 别信“Linux 通用”“跨平台”这类说法,Go 官网明确分包,混用必挂
GOROOT 和 PATH 怎么配才不被系统旧版覆盖
Ubuntu 22.04 自带 go1.18,装在 /usr/lib/go;你新装的 go1.22.5 在 /usr/local/go,但只要 /usr/bin/go 在 PATH 前面,go version 就永远显示旧版。
-
GOROOT必须显式设:export GOROOT=/usr/local/go -
PATH必须把$GOROOT/bin放最前面:export PATH=$GOROOT/bin:$PATH(不是$PATH:$GOROOT/bin) - 写进
~/.zshrc或~/.bashrc后,一定要source ~/.zshrc,再which go确认返回的是/usr/local/go/bin/go - CI、systemd、Docker 里不读用户配置,得写
/etc/profile.d/golang.sh全局生效
为什么 go mod init 失败、go run 找不到 fmt,却显示 go version 正常
这是环境变量没生效的典型症状,不是代码问题。常见于:
-
go env GOROOT返回空或/usr/lib/go→ 说明GOROOT没设或设错路径 -
go mod download卡住或报unexpected EOF→ 实际是没设GOPROXY,直连proxy.golang.org超时 - 新建空目录执行:
go mod init hello→echo 'package main; import "fmt"; func main(){fmt.Println("x")}' > main.go→go run main.go,三步全通才算可用 - 别用
apt install golang混搭:它可能删了go tool pprof,也可能让go env GOPATH返回空,调试时突然找不到工具
国内环境不设 GOPROXY 就等于没装
go version 成功 ≠ 能干活。所有依赖拉取、模块初始化、go run 隐式下载都走代理。不设就卡死,错误信息还藏得深:
- 现象:
go mod download github.com/some/pkg卡 2 分钟后报reading github.com/some/pkg/go.mod: unexpected EOF - 真实原因:DNS 解析
proxy.golang.org失败,TCP 连接超时,Go 不提示代理问题,只抛底层 I/O 错误 - 必须运行:
go env -w GOPROXY=https://goproxy.cn,direct - 私有模块要加:
go env -w GOPRIVATE=git.example.com/internal,否则会被代理劫持
最易忽略的是:PATH 顺序、GOROOT 显式声明、GOPROXY 强制设置这三点,缺一不可。很多人反复重装,其实只是改了 ~/.bashrc 但忘了 source,或者设了 GOPROXY 却只在当前终端生效,一开新终端就回归“假成功”状态。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











