Go 官方的多版本管理

作者: caixw
修改时间:

用 brew 更新 go 越来越慢。改回了官方给出的 go install 方式管理,感觉比 brew 更加方便,特别是在多版本管理方面,关键是版本更新更加快速,不用像 brew 那样死等。以下两步即可完成:

1go install golang.org/dl/go1.17@latest
2go1.17 download

其原理也简单,golang.org/dl/go1.17 就是一个普通的包,通过 go install 下载并在 $GOBIN 下生成一个名为 go1.17 的程序。该程序对 download 子命令作了特殊处理,表示从服务器上下载 go1.17 版本到本地的 ~/sdk/go1.17 目录下,其它子命令则会尝试传递给 ~/sdk/go1.17/bin/go。所以一旦下载完成,就可以直接把 go1.17 当作 1.17 版的 go 来使用。把 1.17 换成其它版本,即可下载相应版本。

想要多个版本共存,直接下载想要的几个版本就可以了,支持的版本号可以从 https://github.com/golang/dl 查看。

当然使用的主要版本,可以将其做一个链接指向 go 命令:

1ln -s ~/sdk/go1.17/bin/go /usr/local/bin/go
2ln -s ~/sdk/go1.17/bin/gofmt /usr/local/bin/gofmt

目前主要问题是下载目录是不可修改的,直接在代码中写死了 ~/sdk,而且还不好移动,因为 go1.17 这些的子命令传递也是从 ~/sdk 下查找相应的版本程序的。