golang多版本管理工具插件GVM的使用
Golang多版本管理工具GVM的使用指南
GVM简介
GVM是一个Go语言版本管理工具,由Josh Bussdieker在Moovweb工作期间创建,目前由Benjamin Knigge维护。它提供了管理多个Go版本的能力。
主要功能
- 使用
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
- 首先安装Bison:
sudo apt-get install bison
- 安装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要求
- 从官网安装Mercurial
- 从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会提供以下环境变量来帮助管理:
${GVM_OVERLAY_PREFIX}
- 类似于根目录层次结构,适合autoconf/automake工具${PATH}
- 包含${GVM_OVERLAY_PREFIX}/bin
${LD_LIBRARY_PATH}
- 包含${GVM_OVERLAY_PREFIX}/lib
(Linux/FreeBSD)${DYLD_LIBRARY_PATH}
- 包含${GVM_OVERLAY_PREFIX}/lib
(Mac OS X)${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。
更多关于golang多版本管理工具插件GVM的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于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
常见问题解决
- 安装失败:确保已安装所有依赖项,特别是编译工具链
- 权限问题:避免使用sudo安装GVM
- 版本不显示:确保已正确加载GVM脚本到shell配置
替代方案
如果你觉得GVM太复杂,也可以考虑:
go install golang.org/dl/goX.Y.Z@latest
+goX.Y.Z download
- 手动下载解压不同版本并设置GOROOT
GVM提供了强大的Go版本管理功能,特别适合需要同时维护多个使用不同Go版本项目的开发者。