Go 语言多版本安装及管理利器 - GVM

Go 语言多版本安装及管理利器 - GVM

image

Go 的环境安装和配置并不复杂,首先推荐看看官网的安装教程,介绍的非常全面详细。

如果想看中文,并拓展这方面的知识,推荐看《Go Web 编程》这本开源书籍中的第一章:Go 环境配置,作者 astaxie 已经讲解的非常全面直观。

但如果你有 Go 多版本的需求(比如新老版本共存),如果你想更简化 Go 环境配置(省去GOPATH、GOROOT等的配置),你还希望它支持跨平台(支持Mac和Linux),那么我特别推荐这款 Go 第三方工具:GVM—— Go 语言多版本安装及管理利器。

GVM,类似于ruby 中的 RVM,java 中的 jenv(国产),可用于方便管理 Go 的版本,它有如下几个主要特性:

  • 管理 Go 的多个版本,包括安装、卸载和指定使用 Go 的某个版本
  • 查看官方所有可用的 Go 版本,同时可以查看本地已安装和默认使用的 Go 版本
  • 管理多个 GOPATH,并可编辑 Go 的环境变量
  • 可将当前目录关联到 GOPATH
  • 可以查看 GOROOT 下的文件差异

尤其是前三个特性,非常实用,接下来就详细的介绍一下这款工具的安装和常用方式。

一、安装 GVM

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

需要注意的是,如果本地用的是 zsh,直接替换 bash 即可。

二、使用 GVM

直接输入 gvm,查看使用帮助

☁  ~  gvm
Usage: gvm [command]

Description:  
  GVM is the Go Version Manager

Commands:  
  version    - print the gvm version number
  get        - gets the latest code (for debugging)
  use        - select a go version to use (--default to set permanently)
  diff       - view changes to Go root
  help       - display this usage text
  implode    - completely remove gvm
  install    - install go versions
  uninstall  - uninstall go versions
  cross      - install go cross compilers
  linkthis   - link this directory into GOPATH
  list       - list installed go versions
  listall    - list available versions
  alias      - manage go version aliases
  pkgset     - manage go packages sets
  pkgenv     - edit the environment for a package set

帮助简单易懂,这里介绍其中其中几个常用的命令。

三、展示 Go 版本

展示当前所有可以安装的 Go 版本,最新的是 go1.7.3

☁  ~  gvm listall

gvm gos (available)

   go1
   go1.0.1
   go1.0.2
   go1.0.3
   ...
   go1.7.3

展示本地安装好的 Go 版本,箭头表示默认使用的版本,我这里是 go1.7.3

☁  ~  gvm list

gvm gos (installed)

   go1.4
   go1.5
   go1.6.2
   go1.6.3
   go1.7
   go1.7.1
=> go1.7.3

对比本地没有的版本,我们就可以在线安装你需要的版本了。

四、安装指定的 Go 版本

如果是 go 1.5- 的版本,直接安装:

gvm install go1.4  
gvm use go1.4 [--default]

它背后做的事情是先把源码下载下来,再用 C 做编译。

所以如果是 go 1.5+ 的版本,因为至此 Go 实现了自举 (用 Go 编译 Go),就需要用到 Go 1.4 来做编译

# -B 表示只安装二进制包
gvm install go1.4 -B  
gvm use go1.4  
export GOROOT_BOOTSTRAP=$GOROOT  
gvm install go1.7.3

安装好之后,指定默认使用这个版本,加上 --default 即可,省去每次敲 gvm use

gvm use go1.7.3 –default

这个时候查看 go 环境变量:

☁  ~  go env
GOARCH="amd64"  
GOBIN=""  
GOEXE=""  
GOHOSTARCH="amd64"  
GOHOSTOS="darwin"  
GOOS="darwin"  
GOPATH="/Users/bingo/.gvm/pkgsets/go1.7.3/global"  
GORACE=""  
GOROOT="/Users/bingo/.gvm/gos/go1.7.3"  
GOTOOLDIR="/Users/bingo/.gvm/gos/go1.7.3/pkg/tool/darwin_amd64"  
CC="clang"  
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/g_/tjrlnbjd4sl56gp0p2nk3j5h0000gn/T/go-build385345518=/tmp/go-build -gno-record-gcc-switches -fno-common"  
CXX="clang++"  
CGO_ENABLED="1"

全部帮你配置好了,看起来非常赞!

五、管理多个 GOPATH

GVM 还一个很实用的功能,可以管理多个GOPATH(Go package),是通过 gvm pkgset 命令

☁  ~  gvm pkgset
= gvm pkgset

* http://github.com/moovweb/gvm

== DESCRIPTION:

GVM pkgset is used to manage various Go packages

== Usage

  gvm pkgset Command

== Command

  create     - create a new package set
  delete     - delete a package set
  use        - select where gb and goinstall target and link
  empty      - remove all code and compiled binaries from package set
  list       - list installed go packages

说明的很详细,使用方法和 gvm 也类似,就不赘述

六、卸载

如果只是想卸载某个安装好的 Go 版本:

gvm uninstall go1.7.3

如果你想完全卸载掉 GVM 和 所有安装的 Go 版本(需谨慎):

gvm implode

七、注意和不足

  • 在 Linux 下安装 GVM,需要安装相关依赖,详情见官网说明
  • GVM 官方显示没对 Windows 做支持,考虑到 Windows 不是程序员的标配吧( git-windows客户端,自带 bash 功能,可以尝试安装下)。
  • GVM 安装新版本之后,Go 环境变量会重新设置,为了节约磁盘空间和时间,建议把之前版本的 GOPATH 内容移动到新版本对应的 GOPATH 目录下,相关路径可以通过 go env 获取
  • 在同一版本下,用 gvm pkgset 创建多个 GOPATH,可能会占用你比较大的磁盘空间
  • 使用 gvm implode 需谨慎
  • GVM 是用 shell 编写
    https://www.imyangyong.com/blog/categories/
posted @ 2023-01-11 17:16  RandySun  阅读(720)  评论(0编辑  收藏  举报