golang 在 Go 1.18中提供了泛型特性,相信很多goper小伙伴的跃跃欲试想要尝鲜了,但是安装新版本golang的同时又希望保留老的版本,以免影响现有的稳定代码仓库。

为了解决goalng版本升级和本地这个多版本管理的问题,开发了一个安装脚本,用于快速进行版本升级和多版本的管理。

1、brew安装方式

如果你习惯于使用 brew 安装代码,那么使用这个脚本。

#!/bin/bash

GO_VERSION=$1
if [ $1"" == "" ]
then
    echo "please confirm your go version, brew search go | grep go@"
    exit 1
fi

echo "start install go@${GO_VERSION}"
brew update
brew install go@${GO_VERSION}

echo "start change link"
brew unlink go
brew link go@${GO_VERSION}

echo "start change go env config"

echo "install go@${GO_VERSION} ok"
search go | grep go@

这种安装方式虽然相对简单,但是并不可以选择具体的小版本更新,例如指定安装 go@1.18.3这样的版本号。截止到2023年2月10日,可选的版本如下:

  • go@1.13
  • go@1.14
  • go@1.15
  • go@1.16
  • go@1.17
  • go@1.18

此外,最新的 go@1.19.5 也不支持 brew 方式的安装。

因此,如果我们需要更加灵活的指定安装版本,或者说需要安装更新的版本,就可以使用下面这种源码安装的方式。

2、源码安装的方式

#!/bin/bash

GO_VERSION=$1
if [ $1"" == "" ]
then
    echo "please confirm your go version, https://go.dev/dl/"
    exit 1
fi

echo "start install go@${GO_VERSION}"

wget https://go.dev/dl/go${GO_VERSION}.darwin-amd64.tar.gz
sudo mkdir /usr/local/go@${GO_VERSION}
sudo tar -C /usr/local/go@${GO_VERSION} -xzf go${GO_VERSION}.darwin-amd64.tar.gz
rm go${GO_VERSION}.darwin-amd64.tar.gz

echo "start change link"
rm /usr/local/bin/go
rm /usr/local/bin/gofmt
ln -s /usr/local/go@{GO_VERSION}/go/bin/go /usr/local/bin/go
ln -s /usr/local/go@{GO_VERSION}/go/bin/go /usr/local/bin/gofmt

echo "start change go env config"

echo "install go@${GO_VERSION} ok"

可以通过 https://go.dev/dl/ 查询当前可安装的版本。如果需要回退到历史版本,只需要手动删除软链,并创建新软链指定到需要的版本即可。