必须同时清除环境变量和初始化文件中的旧路径:运行 unset GOROOT GOPATH GOBIN,搜删 ~/.bashrc、~/.zshrc 等文件中所有 GOROOT=、GOPATH=、PATH=.*go 行,重启终端或 exec $SHELL,并验证 go env -w GOROOT="" 后 go env GOROOT 是否返回自动探测路径。

which go 和 go env GOROOT 不一致怎么办
这是重装 Go 后最常被忽略的信号:终端里 which go 返回 /usr/local/go/bin/go,但 go env GOROOT 却显示 /home/username/sdk/go ——说明环境变量还在生效,新装的 Go 被旧配置劫持了。
必须同时处理两件事:
- 运行
unset GOROOT GOPATH GOBIN清掉当前 shell 的变量 - 搜遍所有初始化文件:
~/.bashrc、~/.zshrc、~/.profile、/etc/profile,删掉所有含GOROOT=、GOPATH=、PATH=.*go的行 - 改完后彻底关掉终端再重开,或运行
exec $SHELL,别只靠source ~/.zshrc
go clean -modcache 为什么没清干净
go clean -modcache 只删 $GOMODCACHE(默认是 $GOPATH/pkg/mod),但它不碰 go.sum 文件、不删 vendor/ 目录、也不清理私有代理缓存里的重复模块。如果你切换过 GOPROXY 或手动改过 pkg/mod 里的代码,残留就更顽固。
安全起见,直接删整个目录:
立即学习“go语言免费学习笔记(深入)”;
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
- 先确认路径:
go env GOMODCACHE - 再强制删除:
rm -rf $(go env GOMODCACHE) - 顺手清
go.sum(尤其当go mod verify报错时):rm go.sum
卸载后 go version 还能跑,但行为异常
常见于三类残留:
-
go二进制没删净:比如 Homebrew 装的没走brew uninstall go,而是直接删了/usr/local/go,但/opt/homebrew/bin/go还在 PATH 里 - IDE 缓存未刷新:VS Code 或 Goland 会复用旧 terminal 环境,改完配置后不重启 IDE,
go env仍显示旧值 - CGO 构建产物混杂:
$GOCACHE(如~/.cache/go-build)里存着不同CGO_ENABLED或GOOS下的 .a 文件,导致go build静默链接失败
验证是否真干净:运行 go env -w GOROOT="" 后再 go env GOROOT,应返回自动探测路径(如 /usr/local/go),而不是你曾经手动设过的值。
Linux 上用 apt/yum 安装的 Go 怎么彻底卸载
Ubuntu/Debian 用 apt install golang-go 装的,不能只删 /usr/local/go ——它实际装在 /usr/lib/go,且 go 命令是符号链接到 /usr/lib/go-* 的。
- 查真实来源:
dpkg -l | grep golang或apt list --installed | grep golang - 彻底清除:
sudo apt remove --purge golang-go golang-src - 删残留配置:
sudo rm -rf /usr/lib/go-* /usr/share/go - CentOS/RHEL 用
sudo yum remove -y golang,再检查/usr/lib/golang是否还存在
最后提醒一句:go clean 类命令只管构建和模块缓存,不管环境变量、shell 初始化脚本、IDE 设置、系统包管理器注册信息——这些才是重装后“看似干净实则诡异”的根源。

















