Windows下多版本Go语言环境

Go 语言的日常开发过程中,我们往往需要同时使用到多个版本的 Go 语言开发不同项目 。在MacOS下,可以通过 HomeBrew 管理不同版本的 Go 语言,可以通过brew link快速切换 Go 版本。但是 Windows 无法安装 HomeBrew ,且 Windows 上的一些包管理工具有的不支持多版本管理,有的没有紧跟 Go 语言的发行(截至目前, scoop 上 Go 的版本还是1.19.3)。下面介绍两种 Windows 下多版本 Go 语言环境配置方案。

Go 官方的多版本管理

Managing Go installations - The Go Programming Language

为解决不同平台使用多版本 Go 语言的需求,且尽可能不依赖于其他工具,Go 官方提供了通过go install安装额外版本的方案。

1
2
3
4
5
$ go install golang.org/dl/go1.10.7@latest
go1.10.7 download

$ go1.10.7 version
go version go1.10.7 linux/amd64d

通过go install golang.org/dl/go{{version}}@latest,修改其中的{{version}}指定使用的版本即可。后续使用不同版本的 Go 可以使用go{{version}}来代替。如果想修改默认的 Go 版本,可以通过修改 Path环境变量(Windows下),抑或是做一个软连接。

g

voidint/g: Golang Version Manager

Go 官方提供的多版本管理工具使用起来还是稍微复杂了些,不仅需要记忆下载的地址前缀,还要时刻记住版本号。好在社区也提供了一个 Go 语言的多版本管理工具gg是一个支持在Linux、MacOS及Windows下使用的一个命令行工具,可以提供便捷的 Go 语言多版本环境的管理与切换。

安装

自动化安装

使用Powershell可以输入如下命令自动化安装:

1
$ iwr https://raw.githubusercontent.com/voidint/g/master/install.ps1 -useb | iex

手动安装

g默认安装在~/.g目录下,如果需要自定义安装目录的话,则需要手动的安装并进行配置。从Release · voidint/g中下载指定版本的二进制压缩包,解压到指定目录的 bin子目录下,之后需要进行一些环境变量的配置。

1
2
3
4
5
6
$env:G_EXPERIMENTAL="true"
$env:G_HOME="{{targetDir}}\g"
$env:G_MIRROR="https://golang.google.cn/dl/"
$env:GOROOT="{{targetDir}}\g\go"
$env:GOPATH="{{pathDir}}"
$env:Path=-join("$env:G_HOME\bin", "$env:GOROOT\bin;", "$env:GOPATH\bin", "$env:Path")

由于自定义g的安装目录尚属于实验特性[1],必须先设定G_EXPERIMENTALtrue才可指定,G_HOME即为指定的g的安装目录,由于国内下载 Go 语言官方仓库的包网络不稳定,因此通过G_MIRROR可以指定镜像地址。GOROOT需指定为g安装目录下的go子目录,GOPATH则安装各自所需设定。最后再将G_HOMEGOROOTGOPATHbin子目录加入Path环境变量中即可。

使用

查询当前可用的所有版本或是stable状态的 Go 版本

1
2
3
4
5
$ g ls-remote # list all versions of go

$ g ls-remote stable # list all stable versions of go
  1.20.7
  1.21.0

安装指定Go版本

1
2
3
4
5
$ g install 1.21.0
Downloading 100% [===============]              
Computing checksum with SHA256
Checksums matched
Now using go1.21.0

查询已安装的Go版本

1
2
3
4
5
$ g ls
  1.18.10
  1.19.12
  1.20.7
* 1.21.0

切换Go版本

1
2
$ g use 1.20.7
go version go1.20.7 windows/amd64

卸载指定版本

1
2
$ g uninstall 1.19.12
Uninstalled go1.19.12

清除Go安装包缓存,由于g安装后并不会主动清理安装文件,因此建议安装后执行。

1
$ g clean

更新g及卸载g

1
2
3
4
$ g self update
You are up to date! g v1.5.1 is the latest version.

$ g self uninstall