GVM - Go 的多版本管理工具,使用介绍

原文做者: dryyun
原文连接: https://dryyun.com/2018/11/28...

基本介绍

项目地址

Go GitHub
GVM GitHub

本机环境

设备 MacBook Pro
系统 macOS High Sierra 10.13.6

多版本管理使用场景

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

  • 线上版本跟你本地版本不同,你须要切换
  • 想尝试一下最新版本的 Go,可是实际开发仍是不变
  • 其余语言都有 xxvm 工具,Go 也要来一个
以上,其实使用 docker 就能解决了,相比而言,我以为直接切换版本是更轻量级的作法,除非你有同时开发几个项目,都使用不一样版本的 Go 的经验。

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

吐槽一下 brew 的升级,让我不能开心的切换 PHP 版本了,之前的 formula 有 php55,php56,php70,php71 ,都是独立的存在,只要 brew unlink,brew link 就能够了
如今改为 php@5.6,php@7.0,php@7.1,实现方式不一样了,要切换版本,每次都要改 .zshrc 文件

使用

安装

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
若是使用的 zsh,那么把 bash 改为 zsh 便可 git

安装成功,会在家目录下增长 .gvm 的隐藏目录,而且在 .bashrc 或者 .zshrc 文件最底部增长一行
[[ -s "/Users/someone/.gvm/scripts/gvm" ]] && source "/Users/someone/.gvm/scripts/gvm"github

命令

基于 GVM v1.0.22 golang

特别说明web

因为 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,只能感慨做者 。docker

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 都是跟环境变量有关的。 shell

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

GOPATH="$home/go" GOBIN="$GOPATH/bin" PATH="​$GOBIN:$PATH"
相关文章
相关标签/搜索