以下都是在 mac (其他系统原理都是一样的)下的描述:
安装 go 的 sdk 后,一般 go 的文件夹会放在/usr/local/go 目录中,后面需要升级或安装特定版本时只需要下载安装包然后覆盖即可;
最近遇到的问题:dockerfile 中构建镜像的 go 版本低于项目使用的 go 版本而无法打包;
解决方式,将/usr/local/go 目录中都 go 文件夹改名为 go+版本号,例如“go_1.22.4” 目的是为了为以后更改版本更方便,然后再装新的版本,就又会在/usr/local/go 中创建新的 go 目录;需要升级时再把“go_1.22.4”改回 go 另外一个重命名即可。
原理:本质上编译器在查找 go 的 sdk 是,会有一个类似 Windows 上系统 path (系统环境变量)的地方,指定了 go sdk 的位置,只要能找到对应的文件就能执行相应的 sdk;
换个思路是不是只要将系统环境变量指定 go sdk 的路径创建一个软连接到包含 go sdk 的文件夹就可以了,也就是可以快速的切换版本;
优化方法,写一个脚本。可以通过简单的命令让系统环境变量,灵活的指定不同的 go sdk 目录就可以切换 go 的版本。当然有一些控制版本的工具,可以实现奈何国内的网络拉镜像实在是太慢了,有时候魔法也不好使。