在 CentOS 上升级 Golang 的可选方案
标准升级步骤 手动安装官方压缩包
卸载旧版(如曾用 yum 安装)
sudo yum remove -y golang下载并解压新版本
wget https://golang.google.cn/dl/go1.22.5.linux-amd64.tar.gz
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
配置环境变量
echo 'export GOROOT=/usr/local/go' | sudo tee -a /etc/profile
echo 'export GOPATH=$HOME/go' | sudo tee -a /etc/profile
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' | sudo tee -a /etc/profile
source /etc/profile
source ~/.bashrc验证
go version
go env GOROOT GOPATH
预期输出类似:go version go1.22.5 linux/amd64。
多版本共存与切换
方案一 手动多目录 + GOROOT 切换
# 安装两个版本到不同目录
sudo tar -C /usr/local -xzf go1.21.13.linux-amd64.tar.gz
sudo mv /usr/local/go /usr/local/go1.21.13
sudo tar -C /usr/local -xzf go1.22.5.linux-amd64.tar.gz
sudo mv /usr/local/go /usr/local/go1.22.5
# 在 ~/.bashrc 中配置
echo 'export GOROOT_1_21=/usr/local/go1.21.13' >> ~/.bashrc
echo 'export GOROOT_1_22=/usr/local/go1.22.5' >> ~/.bashrc
echo 'export PATH=$GOROOT_1_22/bin:$PATH' >> ~/.bashrc # 默认使用 1.22
source ~/.bashrc
# 切换版本
# 使用 1.21
export GOROOT=$GOROOT_1_21
export PATH=$GOROOT/bin:$PATH
# 使用 1.22
export GOROOT=$GOROOT_1_22
export PATH=$GOROOT/bin:$PATH
方案二 使用 alternatives 统一管理 /usr/bin/go
sudo update-alternatives --install /usr/bin/go go /usr/local/go1.21.13/bin/go 10
sudo update-alternatives --install /usr/bin/go go /usr/local/go1.22.5/bin/go 20
sudo update-alternatives --config go # 交互选择默认版本
方案三 使用版本管理工具
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
source ~/.gvm/scripts/gvm
gvm install go1.21.13
gvm install go1.22.5
gvm use go1.22.5 --default
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
echo '. $HOME/.asdf/asdf.sh' >> ~/.bashrc
source ~/.bashrc
asdf plugin-add go https://github.com/asdf-vm/asdf-go.git
asdf install go 1.21.13
asdf install go 1.22.5
asdf global go 1.22.5
以上方式便于在不同项目间快速切换版本。
使用 Docker 隔离环境
docker pull golang:1.22
docker run -it --rm -v "$PWD":/app -w /app golang:1.22 bash
# 在容器内
go version
go build -o myapp .
适合 CI/CD 或避免污染宿主机环境。常见问题与建议
go version 仍显示旧版本
which -a go;若 /usr/local/go/bin 不在首位,调整 PATH,或改用 alternatives 设置默认 go。go env GOROOT 应为 /usr/local/go。go env -w GOPROXY=https://goproxy.cn,direct。sudo yum remove -y golang