基本介绍

项目地址

本机环境

设备 MacBook Pro

系统 macOS High Sierra 10.13.6

多版本管理使用场景

在 Mac 上使用 brew install go 真的很简单,一个命令就安装了最新版本的 Go,但是在实际使用过程中

线上版本跟你本地版本不一样,你需要切换

想尝试一下最新版本的 Go,但是实际开发还是不变

其他语言都有 xxvm 工具,Go 也要来一个

以上,其实使用 docker 就能解决了,相比而言,我觉得直接切换版本是更轻量级的做法,除非你有同时开发几个项目,都使用不同版本的 Go 的经验。

brew 有一点不好就是不能安装旧版本的软件,不能安装旧版本的 Go,在切换 Go 版本上也略显麻烦,这个时候就要用到多版本管理了。

吐槽一下 brew 的升级,让我不能开心的切换 PHP 版本了,以前的 formula 有 php55,php56,php70,php71 ,都是独立的存在,只要 brew unlink,brew link 就可以了

现在改成 php@5.6,php@7.0,php@7.1,实现方式不同了,要切换版本,每次都要改 .zshrc 文件

使用

安装

bash <

如果使用的 zsh,那么把 bash 改成 zsh 即可

安装成功,会在家目录下增加 .gvm 的隐藏目录,并且在 .bashrc 或者 .zshrc 文件最底部增加一行

[[ -s "/Users/someone/.gvm/scripts/gvm" ]] && source "/Users/someone/.gvm/scripts/gvm"

命令

基于 GVM v1.0.22

特别说明

由于 Go 1.5 使用了自举,也就是用 Go 写 Go,如果在系统环境完全没有 Go 命令的情况下,使用 gvm install go 会报错,可以参考 gvm 文档相关说明,会要求先安装 Go 1.4,但是呢,对于高版本的 macOS 来说,安装 Go 1.4 是会失败的。

所以我的做法是使用 brew install go 先安装一个 Go,然后再使用 gvm 安装多版本,不过也只是建议安装 >= 1.5 的版本。

GVM 本质上就是 shell 脚本,而作者的文档写的也不尽如人意,如果对命令不了解,对命令不满意,完全可以进入 cd ~/.gvm/scripts,查看、修改相应的命令。

比如查看各个命令的 help 帮助就很不同,gvm install -,gvm listall help,gvm use -h,只能感慨作者 。

Usage: gvm [command]

Description:

GVM is the Go Version Manager

Commands:

version - print the gvm version number

- 打印 GVM 的版本

get - gets the latest code (for debugging)

- 获取 GVM 最新的代码

use - select a go version to use (--default to set permanently)

- 当前终端环境使用某个 go 版本,加上 --default 代表所有新打开的终端环境都使用这个版本

- 查看帮助,`gvm use -h`

diff - view changes to Go root

- ???

help - display this usage text

- 显示帮助信息

implode - completely remove gvm

- 彻底删除 gvm 和安装的所有 go 版本和包

- 如果命令没用,那么删除 `rm -rf ~/.gvm` 目录,去掉 .bashrc 或者 .zshrc 的相关内容即可

install - install go versions

- 安装某个 go 的版本

- 可以加上 tag, gvm install [tag],参考 https://github.com/golang/go/tags ,安装一些非稳定版本

- 查看帮助,`gvm install - `

uninstall - uninstall go versions

- 卸载某个 go 版本

cross - install go cross compilers

- 安装交叉编译器

- gvm cross [os] [arch],os = linux/darwin/windows,arch = amd64/386/arm

linkthis - link this directory into GOPATH

- 链接指定目录到 GOPATH 路径

- 以个人使用来说,只要正确设置 GOPATH 就行,这个命令基本用不到,可以往下看 GOPATH 设置部分

- 查看帮助,gvm linkthis -h

- 吐槽,是不是缺了 unlink 命令。。

list - list installed go versions

- 列出安装的 Go 版本

listall - list available versions

- 列出可用的 Go 版本

- 使用 `--all `,列出所有的 tags

- 查看帮助,gvm listall help

alias - manage go version aliases

- 管理 Go 版本别名

- gvm alias list ,列出所有别名

- gvm alias create [alias name] [go version name],创建别名

- gvm alias delete [alias name] ,删除别名

- 个人感觉也基本用不到

pkgset - manage go packages sets

- gvm pkgset [create/use/delete/list/empty] [pkgset name]

- 管理 GOPATHs 环境变量

- 会在 `~/.gvm/environments` 目录下创建相应的文件

- 吐槽,没有类似的 unuse 命令

pkgenv - edit the environment for a package set

- 编辑 pkgset 的环境变量

- gvm pkgenv [pkgset name]

环境设置

通过 go env 可以查看当前设置的 Go 的环境。

其中 GOPATH 的设置,肯定是最重要的,不过在 go 1.11 版本中,推出了 go module,好像弱化了 gopath 的作用 。

通过 gvm use [version] 切换 Go 的版本,也会更改相应的环境变量,其中就包括 GOPATH="/Users/someone/.gvm/pkgsets/go1.10.4/global" 。

那么问题来了,我每次切换版本,都会改变 GOPATH ,这在开发中很蛋疼,你可以看出有三个命令,linkthis,pkgset,pkgenv 都是跟环境变量有关的。

对我而言,这些命令都不用,承接上文中安装,再在 [[ -s "/Users/someone/.gvm/scripts/gvm" ]] && source "/Users/someone/.gvm/scripts/gvm" 这句话后面增加相应的环境变量就可以覆盖了。

GOPATH="$home/go"

GOBIN="$GOPATH/bin"

PATH="​$GOBIN:$PATH"

php版本管理工具,GVM - Go 的多版本管理工具,使用介绍相关推荐

  1. GoLang语言多版本管理工具--GVM入门介绍

    GoLang语言多版本管理工具--GVM入门介绍 GVM 由Josh Bussdieker(jbuss,jaja,jbussdieker)在Moovweb工作期间 GVM提供了一个管理Go版本的界面. ...

  2. 二进制包如何知道go 版本_你有同时使用多版本 Go 语言的需求吗,那就快使用多版本管理利器 GVM 吧!...

    公众号关注 「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux ! Golang 发展迅速,代码迭代非常快,想要在同一环境调试和梳理不同项目进程就成了一件相对棘手的事情.二进制文件的管 ...

  3. Golang 多版本管理神器 gvm

    缘起 最近编译 kubernetes 遇到了点坑,编译各种报错,经搜索调研发现 k8s 的编译对 go 的版本有很严格的要求.比如我的 go1.13.4 就无法编译 kubernetes v1.16. ...

  4. 猿创征文|产品工具-面向综合效能提升的工具库

    引言 作为一名从软件工程师出身的产品,一个软件或者产品的上限是由开发者和设计者本身的综合素养和能力决定的,而下限是由团队的综合效能的产出去决定的,君子不器体现了以人为本的核心思想,善假于物是在了解了工 ...

  5. java dump分析工具_java性能分析与常用工具

    本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...

  6. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  7. 搜索引擎提交工具_钦州SEO优化_SEO工具常用的有哪些大盘点,做SEO优化不再累...

    发布时间:2020-11-06 08:11:48 现在的搜索引擎中,已经有大量的或免费,或付费的seo工具,总的来讲,可以分为几个大类,包括但不限于网站管理员工具,外链查询工具,seo综合查询工具,关 ...

  8. Python-EEG工具库MNE中文教程(13)-“bad“通道介绍

    目录 标记坏频道/标记不良通道(marking bad channels) 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:903290195 本教程主要介绍手动标记坏通道以及 ...

  9. 【Windows 逆向】OD 调试器工具 ( CE 工具通过查找访问的方式找到子弹数据基地址 | 使用 OD 工具附加游戏进程 | 在 OD 工具中查看子弹数据地址 | 推荐 )

    文章目录 前言 一.CE 工具通过查找访问的方式找到子弹数据基地址 二.使用 OD 工具附加游戏进程 三.在 OD 工具中查看 058E2F1C 地址数据 前言 上一篇博客 [Windows 逆向]O ...

最新文章

  1. CentOS忘记密码
  2. 自动装配——@Resource(JSR250)和@Inject(JSR330)---[java规范的注解]
  3. 多边形填充算法-有序边表法(扫描线算法)
  4. python计算某年某月多少天_Python编程实现输入某年某月某日计算出这一天是该年第几天的方法...
  5. C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
  6. 双系统安装ubuntu的各种错误
  7. POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
  8. Promise API 简介
  9. 银行按揭借款合同范本
  10. centos7设置分辨率
  11. 机器学习:特征选择之RFormula(SparkMLlib中的RFormula)
  12. Hadoop生态系统功能组件,主要包括哪些?
  13. 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)
  14. 实验四实验四实验四啊!
  15. 苹果6运行内存是多少_安卓手机12GB运行内存为何打不过苹果的4GB?有哪些原因?...
  16. 沐风:小程序推广高手速成秘笈
  17. RDD -- Transformation算子分析
  18. 利用matlab怎样进行频谱分析
  19. 卡巴斯基KIS的激活方法
  20. win快捷键_Windows 被冷落的 WIN 键,其实比你想的更好用

热门文章

  1. python人民币转大写_python2.x实现人民币转大写人民币
  2. linux c控制进程并发量,浅谈Linux环境下并发编程中C语言fork()函数的使用
  3. 环游世界,走遍读过的每一个国家和城镇
  4. PointNet++等3D点云中用到的.cu、.cpp文件的编译的简单理解
  5. C#免费教程(bili网站搜罗VSTO免费视频资源)
  6. 关于物流管理的软件测试项目经验,物流软件自动化测试用例管理和执行调度的设计与实现...
  7. php rewrite 开启,Apache Rewrite 开启和使用方法
  8. 数学不好python好学吗_数学不好的人,是否还应该坚持学编程?
  9. 赵小楼《天道》《遥远的救世主》深度解析(114)时刻要认清自己的本位
  10. 产品卖不出去?那你该学学向上销售和交叉销售了