应直接使用官方 tar.gz 包安装 go:统一解压到 /usr/local,软链 /usr/local/go,显式声明 goroot 并写入 /etc/profile.d/go.sh,确保 path 顺序正确、多用户生效且避免污染系统目录。

直接用官方 tar.gz 包,别碰 apt 或 brew
系统包管理器装的 Go 通常滞后 2–3 个主版本(比如 Ubuntu 24.04 默认给 go1.18,而当前稳定版已是 go1.22.5);Homebrew 虽较新,但把 Go 装进 /opt/homebrew/Cellar/go/1.22.5 这类路径,GOROOT 不稳定,升级后硬链接断裂,go 命令可能静默失效。自动化脚本必须控制安装位置和环境变量作用域——统一解压到 /usr/local,软链 /usr/local/go,显式声明 GOROOT。
脚本核心:下载 URL 构造 + 安全解压 + 全局环境变量写入
关键不是“下载再解压”,而是怎么避免污染 /usr/local、怎么让所有用户生效、怎么保证 PATH 顺序正确。常见错误是直接 sudo tar -xzf go*.tar.gz -C /usr/local——官方 tar 包顶层是 go/ 目录,但某些镜像站打包不规范,会直接解出一堆文件到 /usr/local 下。
- 用
curl -sL https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz | sudo tar -C /usr/local -xzf -确保只解出go/目录 -
sudo ln -sf /usr/local/go/bin/* /usr/local/bin/把 go 工具链暴露到全局 PATH,比改 PATH 更轻量 - 写入
/etc/profile.d/go.sh(而非直接改/etc/profile),内容必须包含export GOROOT=/usr/local/go和export PATH=$GOROOT/bin:$PATH,顺序不能反,否则go命令可能被旧版本覆盖
支持指定版本与架构的参数化写法
硬编码版本号(如 GO_VERSION="1.21.5")在 CI/CD 中容易过期;自动拉取最新版又可能引入破坏性变更。稳妥做法是留出参数入口,同时默认走最新稳定版。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
- 脚本开头加
GO_VERSION=${1:-$(curl -s https://go.dev/VERSION?m=text)},支持传参覆盖 - 架构判断用
uname -m:匹配x86_64→amd64,aarch64或arm64→arm64 - 下载 URL 拼接为
https://go.dev/dl/go${GO_VERSION}.linux-${ARCH}.tar.gz,避免手动改脚本 - 验证环节必须有
go version和go env GOROOT,否则脚本成功但环境没生效,后续构建会卡在command not found
Windows 和 macOS 用户别照搬 Linux 脚本
Linux 脚本依赖 tar、ln、/etc/profile.d,这些在 Windows(CMD/PowerShell)和 macOS(zsh 默认)上不存在或行为不同。Windows 推荐用 .msi 安装包(自动配环境变量),macOS 用 Homebrew 是最省心的,但要注意:brew install go 后 GOROOT 指向 Cellar 子路径,若需多版本共存或 CI 场景复现,仍建议用官方 .pkg 或手动解压 .tar.gz 到 /usr/local/go。
真正容易被忽略的是:脚本执行后,当前 shell 会话不会自动加载新环境变量,必须 source /etc/profile.d/go.sh 或新开终端;Docker 构建中若用 RUN 执行该脚本,得额外 source 或用 bash -c "go version" 验证,否则构建阶段看不到效果。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










