GVM:Go语言版本和包管理的神器!

简介: GVM,Go版本管理器,简化了在单机上切换不同Go版本的任务。

在 Go 开发中,不同的项目可能需要不同的 Go 版本。这时候,GVM(Go Version Manager)就像是一个救星,它允许您在同一台机器上轻松切换不同版本的 Go。以下是如何安装和使用 GVM 来管理您的 Go 版本。

为什么需要 GVM?

在进入使用之前,让我们先聊聊为什么需要GVM。

想象一下,你同时在开发两个项目:一个需要Go1.16版本,而另一个项目必须使用Go1.21版本因为它使用了Go最新的特性。这时候,如果没有GVM,你就得不停地手动安装和卸载不同版本的Go,这不仅麻烦,而且很容易出错。GVM的出现就是为了解决这类问题。

安装 GVM

安装 GVM 是一个相当简单的过程,你只需要执行下面的命令即可:

# 通过curl安装GVM
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

或者,你也可以选择下载脚本然后执行,这两种方式哪种方便就用哪种:

# 下载脚本方式安装GVM
curl -o gvm-installer https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer 
chmod +x gvm-installer
./gvm-installer

查看和安装 Go 版本

一旦GVM安装成功,你可以很容易地查看所有可用的Go版本:

gvm listall

然后,你可以选择安装一个指定的Go版本,比如Go1.16.5:

# 安装Go1.16.5版本
gvm install go1.16.5

切换 Go 版本

安装好特定版本的Go后,你可以通过以下命令切换正在使用的Go版本:

# 使用Go1.16.5版本
gvm use go1.16.5
# 将Go1.16.5设置为默认版本
gvm use go1.16.5 --default

卸载 Go 版本

如果你不再需要特定版本的Go,GVM也提供了卸载的选项:

# 卸载Go1.16.5版本
gvm uninstall go1.16.5

完全卸载 GVM

如果你想要完全卸载掉GVM,包括它安装的所有Go版本,可以通过以下命令:

gvm implode

这将删除GVM和所有相关的Go版本。如果gvm implode出现问题,你也可以手动删除GVM根目录:

rm -rf $GVM_ROOT

然后,记得从你的~/.bashrc~/.zshrc 文件中删除相关的GVM脚本行。

使用 GVM pkgset 管理项目依赖

GVM的另一个强大功能是它能让你为每个项目创建隔离的环境(称为pkgset),这样你就可以为每个项目维护不同版本的依赖包而互不干扰。

首先,使用一个特定的版本:

gvm use go1.21.0

创建一个新的pkgset:

# 创建名为 `ppGvm` 的 pkgset
gvm pkgset create ppGvm

在创建后,你可以通过以下命令切换到使用该pkgset:

gvm pkgset use ppGvm

此时,你就可以在这个隔离的环境下安装或者更新项目所需的依赖包了。


GVM不但帮你解决了版本冲突的问题,而且通过pkgset功能,还能帮你为每个项目创建独立的工作环境。

无论你是Go的初学者,还是经验丰富的开发者,GVM都是你管理Go版本的好帮手。

相关文章
|
8月前
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
8月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
2月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。
|
2月前
|
数据采集 JSON Go
Go语言实战案例:实现HTTP客户端请求并解析响应
本文是 Go 网络与并发实战系列的第 2 篇,详细介绍如何使用 Go 构建 HTTP 客户端,涵盖请求发送、响应解析、错误处理、Header 与 Body 提取等流程,并通过实战代码演示如何并发请求多个 URL,适合希望掌握 Go 网络编程基础的开发者。
|
3月前
|
JSON 前端开发 Go
Go语言实战:创建一个简单的 HTTP 服务器
本篇是《Go语言101实战》系列之一,讲解如何使用Go构建基础HTTP服务器。涵盖Go语言并发优势、HTTP服务搭建、路由处理、日志记录及测试方法,助你掌握高性能Web服务开发核心技能。
|
3月前
|
Go
如何在Go语言的HTTP请求中设置使用代理服务器
当使用特定的代理时,在某些情况下可能需要认证信息,认证信息可以在代理URL中提供,格式通常是:
270 0
|
4月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
5月前
|
分布式计算 Go C++
初探Go语言RPC编程手法
总的来说,Go语言的RPC编程是一种强大的工具,让分布式计算变得简单如同本地计算。如果你还没有试过,不妨挑战一下这个新的编程领域,你可能会发现新的世界。
128 10
|
8月前
|
存储 缓存 监控
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
129 3
|
8月前
|
存储 缓存 安全
Go 语言中的 Sync.Map 详解:并发安全的 Map 实现
`sync.Map` 是 Go 语言中用于并发安全操作的 Map 实现,适用于读多写少的场景。它通过两个底层 Map(`read` 和 `dirty`)实现读写分离,提供高效的读性能。主要方法包括 `Store`、`Load`、`Delete` 等。在大量写入时性能可能下降,需谨慎选择使用场景。