go sdk 多版本管理方案
不同的工程使用的 go sdk 是不一样的,为了避免线上和开发机结果不一致,需要把开发机的 sdk 版本设置成和打包机一致。GoLand IDE 里面很好处理,只要下载 go sdk zip 或者 .tar.gz 压缩包的版本,然后解压,IDE 里面对于不同的工程选择不同的 sdk 文件夹就好了。命令行需要用工具手动切换,会麻烦一些。
1 推荐的方案
如果你可以接受全局切换 go sdk,选择方案1。如果你需要不同 shell 进程使用不同的 go sdk,选择方案2。
1.1 方案1:voidint / g
如果可以接受全局切换 go sdk,建议使用这个方案。
特性:
- go 写的
- 支持 windows 系统,通过 NTFS Junction Points 实现 link,所以不会遇到权限问题。
- 支持 arm64 mac
- 支持设置 mirror,可以设置镜像为 https://golang.google.cn/dl/ ,然后就可以在墙内流畅下载 go sdk 了。
- 看了下代码,下载完成之后,会检查 checksum。
- 是通过爬虫直接检索 golang 官网获取版本信息的,所以不需要每次 go sdk 发布新版本,这个软件也更新到新版本。
- 因为是通过把符号链接直接改了,所以改完会对所有的 shell 进程生效。也就是说,这个修改是全局的。
1.2 方案2:自己下载官网上的 .tar.gz 或者 .zip 压缩包,然后解压处理
如果想要一个 shell 一个 go sdk 版本,可以使用这个方案。
优点:
- 不同的 shell 进程可以使用不同的 go sdk 版本,无穷高的灵活度。windows 下面的 powershell 似乎也能一个 shell 进程设置一个环境变量。
- 可以自行从 google cn 下载压缩包,所以不会遇到各种连接问题。
- 出新的版本,立刻就能从官网下载到。官网改版后,使用爬虫抓取网页获取链接的那些工具会挂掉,但是自己下载没问题。
- 不需要安装第三方工具。
缺点:
- 操作起来实在是太麻烦了。
注意,不要下载 .msi, .pkg 这种安装包,这种一台电脑只能安装一个版本。应该使用 .zip, .tar.gz 压缩包,自己解压缩。
国内可以使用下面的地址下载,不会出现连不上的问题: https://golang.google.cn/dl/
macOS 系统可以按照下面的步骤操作:
openssl sha256 ${file}
3. 移除 com.apple.quarantine 来解决 GateKeeper 阻止应用运行的问题:
xattr -rd com.apple.quarantine ${file_or_directory}
4. 解压缩
5. 把解压缩后的文件移动到 ~/sdk/ 目录下面
6. 修改 shell 配置文件,加上手动切换 go sdk 的 function
PATH_BASE="$PATH"
function use_go_1_17_4 () {
export GOROOT="${HOME}/sdk/go1.17.4"
export PATH="$GOROOT/bin:${PATH_BASE}"
}
function use_go_1_14_1 () {
export GOROOT="${HOME}/sdk/go1.14.1"
export PATH="$GOROOT/bin:${PATH_BASE}"
}
# 设置为默认使用 go 1.14.1
use_go_1_14_1
在 shell 里面切换 go 版本。
# 终端执行这个命令,会把当前 shell 切换到 1.17.4
use_go_1_17_4
# 终端执行这个命令,会把当前 shell 切换到 1.14.1
use_go_1_14_1
2 不推荐的方案
下面的方案都需要连接 golang 的国外官网,所以,你懂的。
特性:
- go 写的
- 不支持使用 https://golang.google.cn/dl/ 镜像
- 没有说是否支持 windows。但是鉴于 windows 的 NTFS symbolic link 的权限限制,作者没有做特殊处理的话,应该是不支持的
- 不支持 arm64 mac
2.2 moovweb / gvm
特性
- shell 写的
- 不支持使用 https://golang.google.cn/dl/ 镜像
- 最初设计是用来管理 go path 项目的,而不是只管理 go sdk 的版本。所以功能过于复杂
- 没有说是否支持 windows。
- mac 系统下安装还需要 command line tools & mercurial,非常麻烦。
2.3 syndbg / goenv
特性
- shell 写的
- 不支持使用 https://golang.google.cn/dl/ 镜像
- 没有说是否支持 windows。
2.4 asdf-vm / asdf
特性
- shell 写的
- 不支持使用 https://golang.google.cn/dl/ 镜像
- 没有说是否支持 windows。
2.5 go 官方方案: Managing Go installations
特性
- 需要先下载一个 go sdk,然后才能安装其他版本,所以会遇到先有鸡还是先有蛋的问题。
- 不支持使用 https://golang.google.cn/dl/ 镜像
- go 命令会加上版本号后缀,这样 shell script, Makefile 使用 go 的地方会遇到问题
- 支持 windows 系统
- 支持 arm64 mac