如何在 Windows 上卸载 Go
Go 的卸载器只删自己的程序目录,别的都不动,用 go get 或 go mod 拉下来的东西都在你的用户目录下,不会被碰。这份指南覆盖用 GoLang.Go winget 包按机器安装的 Go。
先关掉正在用 Go 的程序
关掉所有还在跑 go build、go run 或 gopls 的终端、IDE 或构建工具。卸载前在任务管理器(Ctrl+Shift+Esc)里确认没有 go.exe 或 gopls.exe 还在。
用自带的卸载器移除应用
打开「设置 › 应用 › 已安装的应用」,找到 Go Programming Language,选择卸载,或者运行:
winget uninstall --id GoLang.Go
数据分别在哪里
| 位置 | 里面是什么 | 如何处理 |
|---|---|---|
Program Files\Go |
Go 工具链本身 | 卸载器会删 |
%USERPROFILE%\go |
默认的 GOPATH:下载的模块、go install 编译出的可执行文件,以及你放在这里的自己的代码 |
卸载器不会动,打算重装 Go 的话先备份或留着 |
%LOCALAPPDATA%\go-build |
Go 为加快重新编译维护的构建缓存 | 可以删,Go 需要时会自动重建 |
GOPATH 的默认位置由 Go 官方文档 写明是 %USERPROFILE%\go;这次测试没有用 Go 编译过任何东西,这个目录和构建缓存都没有实测到。
检查结果
卸载完成后建议开一个新的终端窗口,运行下面几条只读命令:
go version
winget list --id GoLang.Go
Test-Path "$env:ProgramFiles\Go"
Test-Path "$env:USERPROFILE\go"
go version报「无法识别」,说明 Go 已经从 PATH 里没了;打印出版本号,说明卸载没完成,或者机器上还有另一个 Go。winget list正常完成且没有匹配,才说明包记录已经没了;列出一行,说明卸载没完成。Test-Path "$env:ProgramFiles\Go"返回False,说明程序目录已经没了;返回True,说明那里还有文件。Test-Path "$env:USERPROFILE\go"返回True,说明你的 GOPATH 还在,只要你没有自己删掉,这就是正常的;里面可能有你自己的代码,删之前先看看装了什么。
用 winget 安装时
winget uninstall 运行的是「设置 › 应用」用的同一个 MSI 卸载器,删的是同一批程序文件,不会动 %USERPROFILE%\go、构建缓存或你用 Go 写的任何项目。
Mole 会列出什么
对按机器安装的 winget 版 Go,卸载审查列表是空的:MSI 卸载器自己就把 Program Files\Go 删了,没有留给 Mole 的东西。Mole 也没有单独列出这一款的程序目录,因为安装程序的登记里没有写安装位置,想确认目录已经没了可以自己去查 Program Files\Go。你的 GOPATH 和构建缓存不管怎样都不在这张列表里。
这次检查覆盖了什么
测试的是通过 winget 用 arm64 版 MSI 按机器提权安装的 Go 1.27.0。这次没有编译过代码,也没有下载过模块。
