golang多版本管理工具插件GVM的使用

Golang多版本管理工具GVM的使用指南

GVM简介

GVM是一个Go语言版本管理工具,由Josh Bussdieker在Moovweb工作期间创建,目前由Benjamin Knigge维护。它提供了管理多个Go版本的能力。

Build Status

主要功能

  • 使用gvm install [tag]安装/卸载Go版本(tag可以是"60.3"、“go1”、“weekly.2011-11-08"或"tip”)
  • 使用gvm diff列出GOROOT中添加/删除的文件
  • 使用gvm pkgset [create/use/delete] [name]管理GOPATH
  • 使用gvm listall列出最新的发布标签
  • 缓存最新Go源代码的干净副本用于多版本安装
  • 将项目目录链接到GOPATH

安装GVM

  1. 首先安装Bison:
sudo apt-get install bison
  1. 安装GVM:
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

如果是zsh用户,将bash替换为zsh即可。

安装Go版本

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

安装完成后,Go会自动添加到PATH中,$GOROOT和$GOPATH也会自动设置。

安装选项

Usage: gvm install [version] [options]
    -s,  --source=SOURCE      从指定源安装Go
    -n,  --name=NAME          重写此版本的默认名称
    -pb, --with-protobuf      安装Go协议缓冲区
    -b,  --with-build-tools   安装包构建工具
    -B,  --binary             仅从二进制安装
         --prefer-binary      尝试二进制安装,失败后回退到源码安装
    -h,  --help               显示此帮助信息

编译Go 1.5+的注意事项

Go 1.5+从工具链中移除了C编译器,因此需要先安装Go 1.4作为引导版本:

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

ARMv6和ARMv7架构(32位)的注意事项

ARMv6架构的二进制版本从Go 1.6开始可用。需要使用现有二进制版本进行引导:

gvm install go1.21.0 -B
gvm use go1.21.0

然后可以编译其他版本:

gvm install go1.20.7

安装Go 1.20+

Go 1.20+需要go1.17.3+作为引导版本:

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

列出Go版本

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

gvm list

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

gvm listall

卸载GVM

完全移除GVM和所有已安装的Go版本及包:

gvm implode

系统要求

Mac OS X要求

  1. 从官网安装Mercurial
  2. 从App Store安装Xcode Command Line Tools
xcode-select --install
brew update
brew install mercurial

Linux要求

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} - 类似于根目录层次结构,适合autoconf/automake工具
  2. ${PATH} - 包含${GVM_OVERLAY_PREFIX}/bin
  3. ${LD_LIBRARY_PATH} - 包含${GVM_OVERLAY_PREFIX}/lib(Linux/FreeBSD)
  4. ${DYLD_LIBRARY_PATH} - 包含${GVM_OVERLAY_PREFIX}/lib(Mac OS X)
  5. ${PKG_CONFIG_PATH} - 包含${GVM_OVERLAY_PREFIX}/lib/pkgconfig

使用示例:

gvm use go1.1
gvm pkgset use current-known-good
# 假设这包含一些C头文件和原生库,Go的CGO功能为我们包装了这些
gvm pkgset create trial-next-version
gvm pkgset use trial-next-version
# 在此处复制current-known-good,但将新版本安装到${GVM_OVERLAY_PREFIX}

故障排除

在升级过程中,GVM的文件状态可能会混乱(特别是从早于0.0.8的版本升级时)。此时可以执行rm -rf ~/.gvm来完全移除GVM。

Gitter


更多关于golang多版本管理工具插件GVM的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang多版本管理工具插件GVM的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang多版本管理工具GVM使用指南

GVM (Go Version Manager) 是一个流行的Go语言多版本管理工具,类似于Ruby的RVM或Node的nvm。它允许你在同一台机器上安装和管理多个Go版本,并轻松切换。

安装GVM

首先需要安装GVM的依赖项:

# Ubuntu/Debian
sudo apt-get install curl git mercurial make binutils bison gcc build-essential

# CentOS/RHEL
sudo yum install curl git mercurial make binutils bison gcc glibc-devel

然后安装GVM:

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

安装完成后,将以下内容添加到你的shell配置文件(如~/.bashrc~/.zshrc):

[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"

然后重新加载shell配置:

source ~/.bashrc  # 或 source ~/.zshrc

基本使用

1. 安装Go版本

# 查看可安装的Go版本
gvm listall

# 安装特定版本
gvm install go1.19.3

# 安装最新版本
gvm install latest

2. 切换Go版本

# 使用某个已安装的版本
gvm use go1.19.3

# 设置为默认版本
gvm use go1.19.3 --default

# 查看当前使用的版本
go version

3. 管理版本

# 列出已安装的版本
gvm list

# 卸载某个版本
gvm uninstall go1.18.5

# 查看GVM版本
gvm version

高级功能

1. 使用pkgset管理项目依赖

GVM允许为不同项目创建独立的pkgset,隔离依赖:

# 创建一个新的pkgset
gvm pkgset create myproject

# 使用pkgset
gvm pkgset use myproject

# 列出所有pkgset
gvm pkgset list

# 删除pkgset
gvm pkgset delete myproject

2. 交叉编译

GVM支持交叉编译到其他平台:

# 安装交叉编译支持
gvm cross [os] [arch]

# 示例:编译Linux 64位
gvm cross linux amd64

3. 环境变量管理

# 查看当前GVM环境变量
gvm pkgenv

# 编辑环境变量
gvm pkgenv myproject

示例:使用GVM管理项目

假设我们有两个项目需要不同Go版本:

# 项目A需要Go 1.19
gvm install go1.19.3
gvm use go1.19.3
gvm pkgset create projectA
gvm pkgset use projectA

# 项目B需要Go 1.20
gvm install go1.20.2
gvm use go1.20.2
gvm pkgset create projectB
gvm pkgset use projectB

常见问题解决

  1. 安装失败:确保已安装所有依赖项,特别是编译工具链
  2. 权限问题:避免使用sudo安装GVM
  3. 版本不显示:确保已正确加载GVM脚本到shell配置

替代方案

如果你觉得GVM太复杂,也可以考虑:

  • go install golang.org/dl/goX.Y.Z@latest + goX.Y.Z download
  • 手动下载解压不同版本并设置GOROOT

GVM提供了强大的Go版本管理功能,特别适合需要同时维护多个使用不同Go版本项目的开发者。

回到顶部