应直接从 go.dev 下载二进制包安装:解析 https://go.dev/VERSION?m=text 获取最新版,下载对应 tar.gz 解压至 /usr/local,软链 /usr/local/go,配置 GOROOT=/usr/local/go、PATH 和 GOPATH,并写入 /etc/profile.d/go.sh 全局生效。

直接用 curl 下载官方二进制包解压到 /usr/local,再配好 PATH 和 GOPATH 就够用了——不需要包管理器、不推荐源码编译、别碰系统仓库里的老旧版本。
为什么不用 apt install golang 或 brew install go
Ubuntu/Debian 仓库中 golang 包通常滞后 2–3 个主版本(比如系统给 1.18,而当前稳定版已是 1.22);brew 虽较新,但会把 Go 安装到用户目录(如 /opt/homebrew/Cellar/go/1.22.0),路径不标准,CI/CD 中易出兼容问题。自动化脚本必须控制安装位置和环境变量作用域。
- 系统包管理器安装的 Go 缺少
GOROOT显式声明,某些工具链(如go install带@latest)行为异常 - Homebrew 安装后
go env GOROOT指向 Cellar 子路径,升级时硬链接断裂,go命令可能静默失效 - 所有自动化场景(Docker 构建、CI runner 初始化)应统一使用
https://go.dev/dl/发布的 tar.gz 包
如何用 shell 脚本下载并部署指定版本 Go
核心是解析 https://go.dev/VERSION?m=text 获取最新版号,再拼出下载 URL;解压后用 ln -sf 建软链保证 /usr/local/go 始终指向当前版本,避免手动改路径。
#!/bin/sh
GO_VERSION=$(curl -s https://go.dev/VERSION?m=text)
GO_URL="https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz"
# 替换为 arm64:go${GO_VERSION}.linux-arm64.tar.gz
curl -sL "${GO_URL}" | sudo tar -C /usr/local -xzf -
sudo ln -sf /usr/local/go/bin/* /usr/local/bin/
写入 /etc/profile.d/go.sh(对所有用户生效)
cat > /tmp/go.sh <<'EOF'
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH
EOF
sudo mv /tmp/go.sh /etc/profile.d/go.sh
sudo chmod +x /etc/profile.d/go.sh
-
curl -sL避免进度条干扰管道;tar -C /usr/local -xzf -直接解压到目标位置 - 不推荐用
sudo tar -xzf go*.tar.gz -C /usr/local—— 多数 tar 包顶层是go/目录,但部分镜像站打包不规范,直接解压可能污染/usr/local -
/etc/profile.d/下的脚本比修改/etc/profile更安全:不破坏原有逻辑,且支持按需加载
验证安装与常见失败点
运行脚本后,新开终端执行 go version 应输出正确版本;若仍显示旧版或报 command not found,大概率是 shell 启动文件未重载或 /usr/local/bin 不在 PATH 中。
漂亮的企业网站。NET2.0出来了, 本次升级修改如下: 1、优化了3层结构。 2、优化了后台管理代码,增强了安全性能。 3、增加了系统名称及关键字管理。 4、增加了系统错误日志记录,自动生成Systemlog.log日志文件。 备注:本系统采用ASP.NET 2.O+ACCESS开发,请调试的朋友安装.NET2.0运行环境! 网站内容 网站栏目包括 首页|企业简介|新闻中心|产品展示|公司展示|
立即学习“go语言免费学习笔记(深入)”;
- 检查
echo $PATH | grep '/usr/local/bin'—— Ubuntu 默认不含该路径,需确认/etc/environment或用户~/.profile已包含PATH="/usr/local/bin:$PATH" -
go env GOROOT必须输出/usr/local/go;若为/usr/lib/go,说明系统包残留未清理:sudo apt remove golang-go golang-src - Docker 中执行该脚本需加
--privileged或确保/usr/local可写;Alpine 镜像无curl,先apk add curl
真正麻烦的不是下载和解压,而是确保 GOROOT 硬编码路径与 PATH 中 bin 目录严格匹配,且所有子 shell 都能继承——任何一步绕过标准路径约定,后续 go mod vendor、cgo 或交叉编译都会突然卡住。









