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 系统可以按照下面的步骤操作:
1. 下载 .tar.gz
请从 google cn 下载压缩包: https://golang.google.cn/dl/
2. 校验 sha256sum
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
特性
  • shell 写的
  • 不支持使用 https://golang.google.cn/dl/ 镜像
  • 最初设计是用来管理 go path 项目的,而不是只管理 go sdk 的版本。所以功能过于复杂
  • 没有说是否支持 windows。
  • mac 系统下安装还需要 command line tools & mercurial,非常麻烦。
特性
特性

2.5 go 官方方案: Managing Go installations

特性
  • 需要先下载一个 go sdk,然后才能安装其他版本,所以会遇到先有鸡还是先有蛋的问题。
  • 不支持使用 https://golang.google.cn/dl/ 镜像
  • go 命令会加上版本号后缀,这样 shell script, Makefile 使用 go 的地方会遇到问题
  • 支持 windows 系统
  • 支持 arm64 mac
 
posted @ 2021-12-10 21:51  cmicat  阅读(1048)  评论(0编辑  收藏  举报