ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

TIL 实践:在 Mac 上从旧版本升级 Go 的完整手动步骤

TIL 实践:在 Mac 上从旧版本升级 Go 的完整手动步骤 文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载在 Mac 上从旧版本升级 Go 需要两条手动清理动作先删除位于/usr/local/go的旧安装目录再移除/etc/paths.d/go这一 PATH 注入文件然后通过官方 dmg 安装包完成新版本安装。本文以 TIL 仓库中 go/upgrading-from-an-older-version-on-mac.md 为主线结合仓库内其他 Go 与 brew 相关笔记给出可复现、可验证的升级流程并解释每一步背后的 PATH 与安装目录机制。为什么要手动升级而非直接覆盖安装Go 官方为 Mac 提供的安装包是一个 pkg/dmg 形式的完整安装器它会把工具链整体安装到系统级的/usr/local/go目录。与通过 Homebrewbrew install go或版本管理器安装的方式不同官方安装器不会自动卸载旧版本——当你的机器上已经存在旧版 Go 时直接运行新版安装器很可能导致新旧文件混在一起甚至因为残留的旧二进制而让go version仍显示旧版本号。因此升级的稳妥路线是先把旧版本彻底清理干净再安装新版本。整个流程分为三个大步骤下载最新的 Mac 安装包来自 Go 官方下载页即 golang.org 的/dl/页面在下载等待期间手动删除机器上已有的旧版 Go运行安装包并在完成后校验版本。第一步下载最新安装包首先前往 Go 官方下载页面golang.org/dl/下载针对 Mac 的最新版安装包。页面中同时提供 Intelx86-64与 Apple Siliconarm64两种架构的包请根据本机芯片选择对应的 dmg/pkg。建议下载动作耗时较长可以先把下载挂起利用这段时间完成下面的清理步骤——这正是本文推荐的并行工作流。第二步清理旧版 Go 的两处残留旧版 Go 的残留通常体现在两个位置安装目录和PATH 注入文件。两处都需要手动处理。删除安装目录/usr/local/go官方安装器默认把 Go 工具链放在/usr/local/go删除它即可移除旧版的所有源码、标准库与编译产物$ sudo rm -rf /usr/local/go这里需要sudo因为/usr/local/go属于系统级目录普通用户没有写权限。删完可以顺手确认目录已不存在$ ls /usr/local/go ls: /usr/local/go: No such file or directory移除 PATH 注入文件/etc/paths.d/goMac 的登录 shell 会读取/etc/paths.d/目录下的每个文件把其中的路径逐行追加进全局PATH。Go 安装器在安装时会在这个目录写入一个名为go的文件内容通常是/usr/local/go/bin用来让go、gofmt等命令对所有用户全局可用。升级时如果不删掉它旧版本的 PATH 条目会一直保留即使新版本已经装好也可能因为路径解析顺序问题让你在终端里敲go version时命中的仍是残留路径下的旧工具。删除命令如下$ sudo rm /etc/paths.d/go这个文件同样位于系统级目录需要管理员权限。注意本文使用rm直接删除文件与目录这是 Go 官方推荐的升级清理方式。删除前请务必确认/usr/local/go确实是 Go 的安装位置可用which go、go env GOROOT先行核对避免误删其他目录。第三步安装新版本并校验清理完成后双击已下载的 dmg/pkg 安装包按提示完成安装即可。安装结束后在命令行验证版本号是否已是期望的最新版$ go version go version go1.xx.x darwin/arm64如果输出的版本号仍为旧版通常是以下原因之一/etc/paths.d/go未删除干净旧 PATH 条目抢占了解析顺序——回到第二步确认未重新打开终端当前 shell 的PATH还是旧值——新开一个终端窗口再试shell 配置如.zshrc、.bashrc中手工追加了其他 Go 路径——检查echo $PATH中go实际解析到了哪里which go。延伸理解 Go 的目录与 PATH 机制这套手动升级流程之所以成立根源在于 Go 对安装目录与可执行文件路径有一套固定约定。仓库中的另一篇笔记 go/find-executables-installed-by-go.md 对此有直接说明用go install安装的第三方工具会进入GOBIN环境变量指定的目录若未设置则回退到$GOPATH/bin或$HOME/go/bin而官方安装器安装的工具链则统一放在/usr/local/go/bin。go help install的帮助文本也明确写着Executables are installed in the directory named by the GOBIN environment variable, which defaults to $GOPATH/bin or $HOME/go/bin if the GOPATH environment variable is not set.由此可见升级 Go 时真正需要关心的 PATH 路径有两类/usr/local/go/bin工具链本体与$HOME/go/bin个人安装的工具。前者由/etc/paths.d/go注入后者通常已存在于 shell 配置中一般不需要随版本升级而改动。延伸不想手动删也可以用 brew 管理如果你的 Go 是通过 Homebrew 安装的升级会更简单——brew upgrade go即可不需要触碰/etc/paths.d/go。这与官方安装器的目录约定不同brew 版的 Go 装在/opt/homebrew/Cellar下并通过brew自己的链接机制暴露到 PATH。仓库中还有两篇相关的 brew 笔记可以对照阅读brew/configure-brew-environment-variables.mdbrewCLI 支持通过HOMEBREW_*环境变量或~/.homebrew/brew.env等文件调整行为例如开启HOMEBREW_BAT让输出走 bat 分页brew/install-go-packages-in-brewfile.md从 2025 年 10 月起Homebrew 的Brewfile支持go指令可以像下面这样把 Go 工具纳入统一管理# Mac keychain management, gpg key brew pinentry-mac # Sanitized production Postgres dumps go github.com/jackc/pg_partialcopy升级后的验证与配套工具升级完成后可以顺手做两组验证确保新工具链可用运行go env确认GOROOT、GOPATH、GOBIN等关键变量指向正确的位置编译运行一个小程序确认标准库与编译链工作正常。如果需要离线查阅新版标准库文档可以用go install golang.org/x/tools/cmd/godoclatest安装 godoc再通过godoc -http:6060在本地启动文档服务详见 go/access-go-docs-offline.md。注意用go install安装的 godoc 会落在$HOME/go/binGOBIN默认路径如果该目录不在 PATH 中需要把它加进去否则终端可能找不到godoc命令。小结在 Mac 上通过官方安装器升级 Go 的核心就是一套先清理、后安装的手动流程步骤命令/操作目的下载从 golang.org/dl 下载最新 dmg获取新版本安装包清理sudo rm -rf /usr/local/go删除旧工具链目录清理sudo rm /etc/paths.d/go移除旧 PATH 注入条目安装双击 dmg 按提示安装部署新版本校验go version确认版本号正确理解/usr/local/go与/etc/paths.d/go这两处的位置和用途后升级过程就不再是照抄命令而是一套可诊断、可排错的确定性操作。相关源码级机制可继续在仓库 go/ 目录下查阅其余 Go 笔记或在 README.md 的 Go 分类索引中浏览完整列表。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐Dependabot Core迁移指南从旧版本升级的完整步骤Dependabot Core迁移指南从旧版本升级的完整步骤 概述 Dependabot Core作为GitHub官方依赖管理工具的核心引擎经历了多次重大架开发工具后端安全供应链安全EasyWatermark设计模式详解从Fragment到Adapter的5个最佳实践EasyWatermark设计模式详解从Fragment到Adapter的5个最佳实践 在Android应用开发中设计模式是构建可维护、可扩展应用的关键。移动开发图像处理SwanLab实战指南从PyTorch到HuggingFace的完整集成流程SwanLab实战指南从PyTorch到HuggingFace的完整集成流程 SwanLab是一款开源的AI模型训练记录与可视化工具支持本地部署与云端使用MLOps人工智能数据可视化上一篇VisiData 音频工作站vdaw实战指南在终端中用 VisiData 完成播客转录的剪切与编辑下一篇radix-ui/react-arrow 发布历史解读隐藏在小组件背后的工程化与兼容性实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表