终于找到了一款我喜欢的安装和管理 Go 版本的工具(下载go安装器)

一直以来,我都习惯通过源码安装 Go。我是这么做的:

1)git clone Go 源码

$ git clone https://github.com/golang/go

2)需要安装什么版本就切换到对应的分支,比如安装 1.15.x

$ git checkout -b release-branch.go1.15 origin/release-branch.go1.15

如果本地之前已经存在该分支,直接 git checkout release-branch.go1.15 即可。

3)将 go 整个目录复制到 /usr/local/go1.15,编译安装

4)创建软链:

ln -s go1.15 go

之后加上环境变量等。

如果想要切换版本,只需要做类似上面的步骤,最后将 go 这个软链指向要切换的版本。

我这种方式存在两个问题:

  • 因为 Go1.5 实现了自举,对于没有安装 Go 的系统,需要先安装 Go1.4;
  • 每次都编译,还是没那么方便,而且如果是 Windows 系统,可能会有一些问题(现在的 Windows 也可能没问题了?好久没使用 Windows 了,使用 Windows 的朋友可以留言告知下);

之后看到 gvm[1] 这个工具,我试用了,可能是国内网络的原因,根本没法安装 Go,基本卡着不动。此外还有一些其他的解决方案,比如 goenv[2],这是仿照 pyenv 和 rbenv 实现的,安装配置感觉略微有点复杂,直接没尝试。

今天发现另外一个工具,和我手动管理多版本的思路类似,所以爱上了!

1、开发 goup 的初衷

发音:Go Up。作者介绍,他开发了这个工具的原因:

1)操作系统发行版的包管理工具一般不会那么及时的升级 Go 到最新版本,特别是 Linux 发行版;

2)虽然安装和管理 Go 版本的工具不少,但作者认为要么存在一些问题,要么体验不好或缺失一些功能;(哈哈哈,很有道理是不是?造一个轮子,总是觉得别人的不够圆,自己的又大又圆,有木有?)

作者想要一个这样的工具:

  • 不需要先安装了 Go 的某个版本;(我上面的管理方案就是需要先安装某个版本)
  • 这个工具本身安装足够简单,最好一行命令搞定;
  • 跨平台,在所有操作系统运行良好,至少在类 Unix 系统运行良好;
  • 能方便的安装最新的 Go 版本;
  • 能方便的安装 Go 的任意版本,包括 tip;
  • 不会污染你的 Shell;
  • 使用 Go 语言实现;

2、安装 goup

因为 goup 本身是 Go 语言实现的,因此他通过一个脚本下载对应系统的预编译 goup 程序。当前最新版本 0.0.7 (这个工具是 9 月底开发的),当然你也可以自己手动下载这些编译好 goup 程序。(如果你本地安装了 Go 版本,直接 go get -u -v github.com/owenthereal/goup 安装也是可以的)

终于找到了一款我喜欢的安装和管理 Go 版本的工具(下载go安装器)

一行代码安装 goup(推荐的方式):

$ curl -sSf https://raw.githubusercontent.com/owenthereal/goup/master/install.sh | sh

3、使用介绍

看看 goup 的帮助文档:

$ goup helpThe Go installerUsage:  goup [command]Available Commands:  help        Help about any command  init        Initialize the goup environment file.  install     Install Go by providing a version (e.g. "1.15.2", or "tip"). If empty, use the latest version.  show        Show the current version of installed Go  version     Show goup versionFlags:  -h, --help   help for goupUse "goup [command] --help" for more information about a command.

  • install:安装对应的 Go 版本,也可以是 tip。如果不提供版本,则安装当前最新版本;
  • show:显示当前生效的 Go 版本;
  • init:会在 $HOME/.go 目录下生成一个 env 文件,内容是设置 PATH 环境变量,即将 $HOME/.go/bin$HOME/.go/current/bin 加入 PATH 中;同时会往一些系统配置文件中加上 source "$HOME/.go/env"

比如我想试试还不支持 Module 的版本:1.10.8

$ goup install 1.10.8Downloaded   0.0% (    3320 / 87999054 bytes) ...Downloaded   3.7% ( 3260416 / 87999054 bytes) ...Downloaded  11.7% (10338304 / 87999054 bytes) ...Downloaded  21.1% (18563072 / 87999054 bytes) ...Downloaded  27.9% (24592384 / 87999054 bytes) ...Downloaded  34.8% (30588928 / 87999054 bytes) ...Downloaded  41.6% (36618240 / 87999054 bytes) ...Downloaded  48.4% (42549248 / 87999054 bytes) ...Downloaded  55.2% (48611328 / 87999054 bytes) ...Downloaded  62.1% (54640640 / 87999054 bytes) ...Downloaded  68.9% (60669952 / 87999054 bytes) ...Downloaded  75.8% (66666496 / 87999054 bytes) ...Downloaded  82.6% (72695808 / 87999054 bytes) ...Downloaded  88.8% (78135296 / 87999054 bytes) ...Downloaded  93.3% (82100224 / 87999054 bytes) ...Downloaded  94.4% (83083264 / 87999054 bytes) ...Downloaded  98.7% (86851584 / 87999054 bytes) ...Downloaded 100.0% (87999054 / 87999054 bytes)INFO[0016] Unpacking /Users/xuxinhua/.go/go1.10.8/go1.10.8.darwin-amd64.tar.gz ...INFO[0020] Success: go1.10.8 downloaded in /Users/xuxinhua/.go/go1.10.8INFO[0020] Default Go is set to 'go1.10.8'

你当前系统的 Go 版本就是 1.10.8 了。如果之前安装过,上面的下载过程就没有了:

$ goup install 1.10.8INFO[0000] go1.10.8: already downloaded in /Users/xuxinhua/.go/go1.10.8INFO[0000] Default Go is set to 'go1.10.8'$ goup showgo1.10.8

尽情地享受吧!

4、工作原理

这个工具的灵感来自 Rust 的工具:rustup[3]

它的工作原理很简单,在 $HOME/.go 目录下创建对应的版本目录,然后在这个目录创建一个软链 current 来控制当前使用哪个 Go 版本。这个思路和我一直源码安装的思路类似。唯一区别是,它是从 dl.google.com 上下载对应编译好的版本。但 tip 版本,则需要 clone Go 源码,进行编译安装,因此要求有 Go 环境。

我本地 $HOME/.go 下的文件信息:

lrwxr-xr-x   1 xuxinhua  staff   28 10  9 17:16 current -> /Users/xuxinhua/.go/go1.10.8-rw-r--r--   1 xuxinhua  staff   57 10  9 16:46 envdrwxr-xr-x  21 xuxinhua  staff  672 10  9 17:14 go1.10.8drwxr-xr-x  22 xuxinhua  staff  704 10  9 10:03 go1.14.9drwxr-xr-x  22 xuxinhua  staff  704 10  9 10:02 go1.15.2drwxr-xr-x   2 xuxinhua  staff   64 10  9 17:10 gotip

5、存在的一些问题

这个工具才出来十几天,试用下来,还存在一些问题:

  • 安装最新版本,需要知道当前最新版本是哪个?这是从 https://golang.org/VERSION?m=text 获取的,但这个网址咱们无法访问;同样的道理,安装 tip 版本,源码是从 https://go.googlesource.com/go 获取的。因此目前大陆还无法使用;不过我已经给作者提了 issue,应该很快就会支持;
  • 缺失一些功能。比如我想安装某个版本,比如 1.12.x,但我希望安装的是 1.12 系列的最新版本,这时候你只能去找 1.12 的最新版本是哪个。
  • 。。。

我参照 gvm 提供的功能,给 goup 作者提了 issue,希望增加如下功能:

  • goup list 和 goup listall
  • goup uninstall

6、小结

整体上,目前 goup 的使用还是比较顺畅的。欢迎大家试用,可以顺便给个 star。对了,项目地址:https://github.com/owenthereal/goup。

对了,至于为什么会需要管理多版本,我想很多人还会有这样的需求吧?!你为什么需要呢?欢迎留言。

参考资料

[1]

gvm: https://github.com/moovweb/gvm

[2]

goenv: https://github.com/syndbg/goenv

[3]

rustup: https://rustup.rs/

终于找到了一款我喜欢的安装和管理 Go 版本的工具(下载go安装器)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年9月7日 上午9:53
下一篇 2022年9月7日 上午10:07

相关推荐

  • 组织级项目管理软件

    组织级项目管理软件: 项目管理的新时代工具 随着信息技术的飞速发展,组织级项目管理软件已经成为了项目管理不可或缺的工具。这些软件能够帮助企业更好地管理项目,提高项目管理的效率和质量…

    科研百科 2024年5月25日
    75
  • 桂林部队招待所预订网站

    桂林部队招待所预订网站:让您享受舒适的住宿体验 桂林是一座美丽的城市,拥有悠久的历史和丰富的文化。在这里,您可以欣赏到壮丽的山水风景,感受到桂林独特的文化氛围。然而,对于游客来说,…

    科研百科 2024年12月1日
    0
  • 教育科技研究(教育科技创新科研项目有哪些类型)

    教育科技创新科研项目有哪些类型 随着科技的不断发展,教育领域也在进行着不断的创新和改革。教育科技创新科研项目的类型越来越多,下面列举了一些常见的类型。 1. 人工智能教育项目 人工…

    科研百科 2024年4月3日
    64
  • 点镜crm管理软件如何推动企业销售业绩增长?(crm销售管理系统提升业绩)

    疫情下,许多企业不得不在家远程工作,这对企业的销售业务面临着巨大的挑战。销售客户数据存储在excel中,无法有效同步,销售经理无法有效管理销售团队,日程销售行为无法控制,客户数据和…

    科研百科 2022年7月15日
    166
  • 电商ERP软件哪个好?2023年最新电商ERP系统榜单(电商erp软件有哪些软件)

    电商ERP软件哪个好?2023年最新电商ERP系统榜单(电商erp软件有哪些软件) 在电商日常运营中,卖家常常面临着诸多挑战,如产品发布繁多、手动上传速度缓慢等问题,同时还需要应对…

    科研百科 2024年3月27日
    114
  • 2023年党工委书记抓基层党建工作述职报告(2020年党工委书记抓基层党建述职报告)

    一、履行职责情况   1、深入学习宣传贯彻党的二十大精神。扎实开展学习贯彻习近平新时代中国特色社会主义思想主题教育,举办党组织书记专题培训班,邀请市、县有关领导授课,推动主题教育深…

    科研百科 2024年6月25日
    45
  • 服役一代研发一代预研一代

    服役一代、研发一代、预研一代,这三个词一组,常常被用来描述中国军事科技的发展路径。服役一代指的是已经装备部队的新一代武器系统,研发一代指的是正在研发中的新一代武器系统,预研一代则指…

    科研百科 2024年12月1日
    15
  • 科研项目风险与不确定性分析

    科研项目风险与不确定性分析 科研项目是现代科技发展的重要支撑,也是科技创新的核心。然而,科研项目的成功与否不仅取决于科学家的科技创新能力和研究设计,还受到许多不可预测的因素的影响,…

    科研百科 2024年11月11日
    10
  • 交易管理系统项目有哪些

    交易管理系统项目有哪些 随着金融市场的不断发展,交易管理系统作为其中的一个重要组成部分,也得到了广泛的应用。交易管理系统可以帮助交易参与者更好地管理他们的交易活动,提高交易效率和准…

    科研百科 2024年12月30日
    0
  • 技术研发做法

    技术研发做法 随着科技的不断发展,技术研发作为其中的一个重要环节,变得越来越重要。在技术研发的过程中,有许多需要注意的事项,以下是一些常见的技术研发做法。 1. 确定目标和需求在开…

    科研百科 2024年10月19日
    0