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

 

GVM

由Josh Bussdieker(jbuss,jaja,jbussdieker)在Moovweb工作期间

GVM提供了一个管理Go版本的界面。

开源项目:https://github.com/moovweb/gvm

 

特征

  • 安装/卸载Go gvm install [tag]标签为“60.3”,“go1”,“weekly.2011-11-08”或“tip”的版本
  • 列出GOROOT中添加/删除的文件 gvm diff
  • 使用管理GOPATH gvm pkgset [create/use/delete] [name]。使用--localname在本地路径管理信息库(/path/to/repo/.gvm_local)。
  • 列出最新发布标签gvm listall。使用--all列出每周为好。
  • 为多个版本安装缓存最新Go源的干净副本。
  • 将项目目录链接到GOPATH

 

背景

当我们开始使用Go不匹配的依赖项开发时,API的变化会影响我们的构建过程,并且很难与其他人的变化合并。

经过几次整理GOROOT并重建后,我决定拿出一个工具来监督这个过程。它最终演变成今天的gvm。

 

安装

安装:

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

或者,如果你正在使用的zsh只是改变bashzsh

 

安装Go

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

一旦完成,Go将在路径中并准备使用。$ GOROOT和$ GOPATH自动设置。

安装Go时可以指定其他选项:

Usage: gvm install [version] [options]
    -s,  --source=SOURCE      Install Go from specified source.
    -n,  --name=NAME          Override the default name for this version.
    -pb, --with-protobuf      Install Go protocol buffers.
    -b,  --with-build-tools   Install package build tools.
    -B,  --binary             Only install from binary.
         --prefer-binary      Attempt a binary install, falling back to source.
    -h,  --help               Display this message.

关于编译Go 1.5+的注意事项

Go 1.5+从工具链中删除了C编译器,并将其替换为Go中编写的编译器。显然,如果您还没有可用的Go安装,这会产生引导问题。为了编译Go 1.5+,请确保首先安装Go 1.4。

gvm install go1.4 -B
gvm use go1.4
export GOROOT_BOOTSTRAP=$GOROOT
gvm install go1.5

 

列出版本

列出所有已安装的Go版本(当前版本的前缀为“=>”):

gvm list

列出可供下载的所有Go版本:

gvm listall

 

卸载

要完全删除gvm和所有已安装的Go版本和包:

gvm implode

如果不起作用,请参阅本页底部的故障排除步骤。

 

Mac OS X要求

xcode-select --install
brew update
brew install mercurial

Linux/Unix安装

 

Debian / Ubuntu

sudo apt-get install curl git mercurial make binutils bison gcc build-essential

RedHat/CentOS

sudo yum install curl
sudo yum install git
sudo yum install make
sudo yum install bison
sudo yum install gcc
sudo yum install glibc-devel

 

FreeBSD

sudo pkg_add -r bash
sudo pkg_add -r git
sudo pkg_add -r mercurial

 

提供本机代码和依赖关系

GVM支持销售特定于软件包集的本机代码和相关依赖项,如果您需要以隔离方式对最后一个已知良好版本的新配置或其中一个依赖项的版本进行限定,这将非常有用。这种行为对于保持良好的释放工程和生产环境卫生至关重要。

为方便起见,如果您想要将您的工作与操作系统提供的内容分离,GVM将提供以下环境变量以帮助这种方式:

  1. ${GVM_OVERLAY_PREFIX}以类似于适用于auto {conf,make,tools}的根目录层次结构的方式运行,其中它可以传递到./configure --prefix=${GVM_OVERLAY_PREFIX}任何现有的操作系统工件并且不与任何现有操作系统工件冲突,并且工作区密切使用。这适合与之一起使用C{PP,XX}FLAGS and LDFLAGS,但您必须自己管理这些,因为使用它们的每个工具都是不同的。
  2. ${PATH}包括,${GVM_OVERLAY_PREFIX}/bin以便您手动安装的任何工具将驻留在那里,可供您使用。
  3. ${LD_LIBRARY_PATH}包括${GVM_OVERLAY_PREFIX}/lib在FreeBSD和Linux上可以完成任何运行时库搜索。
  4. ${DYLD_LIBRARY_PATH}包括${GVM_OVERLAY_PREFIX}/lib在Mac OS X上可以完成任何运行时库搜索。
  5. ${PKG_CONFIG_PATH}包括${GVM_OVERLAY_PREFIX}/lib/pkgconfig这样pkg-config可以自动解决任何出售的依赖项。

成功秘诀:

gvm use go1.1
gvm pkgset use current-known-good
# Let's assume that this includes some C headers and native libraries, which
# Go's CGO facility wraps for us.  Let's assume that these native
# dependencies are at version V.
gvm pkgset create trial-next-version
# Let's assume that V+1 has come along and you want to safely trial it in
# your workspace.
gvm pkgset use trial-next-version
# Do your work here replicating current-known-good from above, but install
# V+1 into ${GVM_OVERLAY_PREFIX}.
有关工作示例,请参阅examples / native。

故障排除

有时特别是在升级期间,gvm文件的状态可能会混淆。对于从旧版本升级到0.0.8以上的情况,这种情况最为正确。变化正在放缓,LTR迫在眉睫。但是现在rm -rf ~/.gvm将永远删除gvm。敬请关注!