一直习惯从源码安装Go。我是这样操作的:1)gitcloneGo源码$gitclonehttps://github.com/golang/go2)需要安装任何版本的就切换到对应的分支,比如安装1.15.x$gitcheckout-release-分支.go1.15origin/release-branch.go1.15如果本地已经存在分支,gitcheckoutrelease-branch.go1.15即可。3)将go整个目录复制到/usr/local/go1.15,编译安装4)创建软链接:在ln-sgo1.15go后添加环境变量。如果要切换版本,只需要做类似上面的步骤,最后将go软链接指向要切换的版本即可。我这个方法有两个问题:因为Go1.5实现了bootstrapping,对于没有安装Go的系统,需要先安装Go1.4;每次都编译不是那么方便,而且如果是windows系统的话,可能会出一些问题(现在的windows可能还好吧?好久没用windows了,用windows的朋友可以离开一条消息让我知道);后来看到gvm[1]这个工具,就试了一下。可能是国内网络的原因。根本安装不了Go,基本卡死了。此外,还有一些其他的解决方案,比如goenv[2],是在pyenv和rbenv之后实现的。安装配置感觉有点复杂,就没有直接尝试。今天又发现了一个工具,和我手动管理多个版本的想法很像,于是就爱上了!1.开发组初衷宣示:GoUp。作者介绍了自己开发这个工具的原因:操作系统发行版的包管理工具一般不会及时升级到最新版本,尤其是Linux发行版;虽然安装和管理Go版本的工具很多,但笔者认为还是存在一些问题,或者体验不好或者缺少一些功能;(哈哈哈,很有道理吧?造轮子的时候总觉得别人的轮子不够圆,自己的又大又圆,有吗?)作者想要这样的工具:您不需要先安装某个版本的Go;(我上面的管理方案只需要先安装某个版本即可)工具本身很容易安装,最好是一行命令就搞定;跨平台,在所有操作系统上都运行良好,至少在类Unix系统中是这样;很容易安装最新的Go版本;安装任何版本的Go都很容易,包括tip;不会污染你的外壳;它是用Go语言实现的;2、安装goup因为goup本身是用Go语言实现的,它是通过脚本下载系统对应的预编译的goup程序。最新版本是0.0.7(这个工具是九月底开发的)。当然你也可以自己手动下载这些编译好的goup程序。(如果你本地已经安装了Go版本,也可以直接goget-u-vgithub.com/owenthereal/goup安装goup)一行代码安装goup(推荐方式):$curl-sSfhttps://raw.githubusercontent.com/owentheal/goup/master/install.sh|sh3.查看goup的帮助文档使用介绍:$gouphelpTheGoinstallerUsage:goup[command]AvailableCommands:helpHelpaboutanycommandinitInitializethegoupenvironmentfile.installInstallGobyprovidingaversion(e.g."1.15.2",or"tip").Ifempty,usethelatestversion.showthecurrentversionofinstalledGoversionShowgoupversionFlags:-h,--helpforgoupUse"goup[command]--help"fororeinformationaboutacommand.install:安装对应的Go版本,或者提示。如果没有提供版本,请安装最新版本;show:显示当前有效的Go版本;init:在$HOME/.go目录下生成一个env文件,内容是设置PATH环境变量,即在PATH中加入$HOME/.go/bin和$HOME/.go/current/bin;同时,source"$HOME/.go/env"将被添加到一些系统配置文件中;例如,我想尝试一个不支持Module:1.10的版本。8$goupinstall1.10.8已下载0.0%(3320/87999054bytes)...已下载3.7%(3260416/87999054bytes)...已下载11.7%(10338304/87999054bytes)...已下载21.1%(18563072/87999054bytes)9054bytes054...已下载27.9%(24592384/87999054字节)...已下载34.8%(30588928/87999054字节)...已下载41.6%(36618240/87999054字节)...已下载48.4%(42549248/87999054字节)。..已下载55.2%(48611328/87999054bytes)...已下载62.1%(54640640/87999054bytes)...已下载68.9%(60669952/87999054bytes)...已下载75.8%(66666496/87999054bytes).6%(72695808/87999054bytes)...已下载88.8%(78135296/87999054bytes)...已下载93.3%(82100224/87999054bytes)...已下载94.4%(83083264/87999054bytes)...已下载98.7%(86851584/87999054bytes)...已下载100.0%(87999054/87999054bytes)INFO[0016]解包/Users/xuxinhua/.go/go1.10.8/go1.10.8.darwin-amd64.tar.gz...INFO[0020]成功:go1.10.8downloadedin/Users/xuxinhua/.go/go1.10.8INFO[0020]DefaultGoissetto'go1.10.8'您当前系统的Go版本为1.10.8。如果之前安装过,上面的下载过程就没有了:$goupinstall1.10.8INFO[0000]go1.10.8:alreadydownloadedin/Users/xuxinhua/.go/go1.10.8INFO[0000]DefaultGoissetto'go1.10.8'$goupshowgo1.10.8尽情享受吧!4.工作原理本工具的灵感来自Rust工具:rustup[3]。它的工作原理很简单,在$HOME/.go目录下创建一个对应的版本目录,然后在这个目录下创建一个软链接current来控制当前使用的是哪个Go版本。这个思路和我一直在想的源码安装的思路差不多。唯一的区别是它从dl.google.com下载对应的编译版本。但是tip版本需要cloneGo源码进行编译安装,所以需要Go环境。我本地$HOME/.go下的文件信息:lrwxr-xr-x1xuxinhuastaff2810917:16current->/Users/xuxinhua/.go/go1.10.8-rw-r--r--1xuxinhuastaff5710916:46envdrwxr-xr-x21xuxinhuastaff67210917:14go1。10.8drwxr-xr-x22xuxinhuastaff70410910:03go1.14.9drwxr-xr-x22xuxinhuastaff70410910:02go1.15.2drwxr-xr-x2xuxinhuastaff6410917:10gotip5。一些问题。版本,需要知道哪个是最新版本?这是从https://golang.org/VERSION?m=text获取的,但是我们无法访问这个URL;同理,安装tip版本,源码是从https://go.googlesource.com/go抓取的。所以大陆暂不可用;但是我已经向作者提出了一个问题,应该很快就会支持;缺少一些功能。比如我想安装某个版本,比如1.12.x,但是我想安装1.12系列的最新版本。这个时候只能查到哪个是最新的1.12版本。...参考gvm提供的功能,向goup的作者提了一个issue,希望增加如下功能:gouplist和gouplistallgouuninstall6。总结总体来说,目前goup的使用还是比较顺利的。欢迎大家尝试,可以顺便给个star。顺便说下项目地址:https://github.com/owentheal/goup。对了,至于为什么要管理多个版本,我想很多人还是有这样的需求吧?!你为什么需要它?欢迎留言。
