千家信息网

如何使用GVM管理Go项目

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容介绍了"如何使用GVM管理Go项目"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!gvm是一个
千家信息网最后更新 2026年11月01日如何使用GVM管理Go项目

本篇内容介绍了"如何使用GVM管理Go项目"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

gvm是一个Linux、macOS、Windows下的命令行工具,可以提供一个便捷的多版本go环境的管理和切换。

安装 GVM

安装 GVM 很简单。GVM 存储库安装文档指示你下载安装程序脚本并将其传送到 Bash 来安装:

bash

尽管越来越多的人采用这种安装方法,但是在安装之前先看看安装程序在做什么仍然是一个很好的想法。以 GVM 为例,该安装程序脚本: 1.检查一些相关依赖性 2.克隆 GVM 存储库 3.使用 shell 脚本: (1)安装 Go 语言 (2)管理GOPATH环境变量 (3)向bashrc、zshrc或配置文件中添加一行内容 如果你想确认它在做什么,你可以克隆该存储库并查看 shell 脚本,然后运行 ./binscripts/gvm-installer 这个本地脚本进行设置。

注意: 因为 GVM 可以用来下载和编译新的 Go 版本,所以有一些预期的依赖关系,如 Make、Git 和 Curl。你可以在 GVM 的自述文件中找到完整的发行版列表。

使用 GVM 安装和管理 GO 版本 GVM

一旦安装了 GVM,你就可以使用它来安装和管理不同版本的 Go。gvm listall 命令显示可下载和编译的可用版本的 Go:

[chris@marvin ]$ gvm listallgvm gos (available)  go1  go1.0.1  go1.0.2  go1.0.3

安装特定的 Go 版本就像 gvm install 一样简单,其中 是 gvm listall 命令返回的版本之一。 假设你正在进行一个使用 Go1.12.8 版本的项目。你可以使用 gvm install go1.12.8 安装这个版本:

[chris@marvin]$ gvm install go1.12.8Installing go1.12.8...* Compiling...go1.12.8 successfully installed!

输入 gvm list,你会看到 Go 版本 1.12.8 与系统 Go 版本(使用操作系统的软件包管理器打包的版本)一起并存:

[chris@marvin]$ gvm listgvm gos (installed)  go1.12.8=> system

GVM 仍在使用系统版本的 Go ,由 => 符号表示。你可以使用 gvm use 命令切换你的环境以使用新安装的 go1.12.8:

[chris@marvin]$ gvm use go1.12.8Now using version go1.12.8[chris@marvin]$ go versiongo version go1.12.8 linux/amd64

GVM 使管理已安装版本的 Go 变得极其简单,但它不止于此!

使用 GVM pkgset

开箱即用,Go 有一种出色而令人沮丧的管理包和模块的方式。默认情况下,如果你 go get 获取一个包,它将被下载到 $GOPATH 目录中的 src 和 pkg 目录下,然后可以使用 import 将其包含在你的 Go 程序中。这使得获得软件包变得很容易,特别是对于非特权用户,而不需要 sudo 或 root 特权(很像 Python 中的 pip install –user)。然而,在不同的项目中管理相同包的不同版本是非常困难的。

有许多方法可以尝试修复或缓解这个问题,包括实验性 Go Modules(Go 1.11 版中增加了初步支持)和 Go dep(Go Modules 的"官方实验"并且持续迭代)。在我发现 GVM 之前,我会在一个 Go 项目自己的 Docker 容器中构建和测试它,以确保分离。

GVM 通过使用 "pkgsets" 将项目的新目录附加到安装的 Go 版本的默认 上,很好地实现了项目之间包的管理和隔离,就像PATH 在 Unix/Linux 系统上工作一样。

想象它如何运行的。首先,安装新版 Go 1.12.9:

[chris@marvin]$ echo $GOPATH/home/chris/.gvm/pkgsets/go1.12.8/global[chris@marvin]$ gvm install go1.12.9Installing go1.12.9...* Compiling...go1.12.9 successfully installed[chris@marvin]$ gvm use go1.12.9Now using version go1.12.9

当 GVM 被告知使用新版本时,它会更改为新的 $GOPATH,默认 gloabl pkgset 应用于该版本:

[chris@marvin]$ echo $GOPATH/home/chris/.gvm/pkgsets/go1.12.9/global[chris@marvin]$ gvm pkgset listgvm go package sets (go1.12.9)=>  global

尽管默认情况下没有安装额外的包,但是全局 pkgset 中的包对于使用该特定版本的 Go 的任何项目都是可用的。

现在,假设你正在启用一个新项目,它需要一个特定的包。首先,使用 GVM 创建一个新的 pkgset,名为 introToGvm:

[chris@marvin]$ gvm pkgset create introToGvm[chris@marvin]$ gvm pkgset use introToGvmNow using version go1.12.9@introToGvm[chris@marvin]$ gvm pkgset listgvm go package sets (go1.12.9)   global=>  introToGvm

如上所述,pkgset 的一个新目录被添加到$GOPATH:

[chris@marvin]$ echo $GOPATH/home/chris/.gvm/pkgsets/go1.12.9/introToGvm:/home/chris/.gvm/pkgsets/go1.12.9/global

将目录更改为预先设置的introToGvm 路径,检查目录结构,这里使用 awk 和 bash 完成。

[chris@marvin]$ cd $( awk -F':' '{print $1}' $GOPATH )[chris@marvin]$ pwd/home/chris/.gvm/pkgsets/go1.12.9/introToGvm[chris@marvin]$ lsoverlay  pkg  src

请注意,新目录看起来很像普通的$GOPATH。新的 Go 包使用同样的 go get 命令下载并正常使用,且添加到 pkgset 中。 例如,使用以下命令获取 gorilla/mux 包,然后检查 pkgset 的目录结构:

[chris@marvin]$ go get github.com/gorilla/mux[chris@marvin]$ tree[chris@marvin introToGvm ]$ tree.├── overlay│   ├── bin│   └── lib│       └── pkgconfig├── pkg│   └── linux_amd64│       └── github.com│           └── gorilla│               └── mux.asrc/└── github.com   └── gorilla       └── mux           ├── AUTHORS           ├── bench_test.go           ├── context.go           ├── context_test.go           ├── doc.go           ├── example_authentication_middleware_test.go           ├── example_cors_method_middleware_test.go           ├── example_route_test.go           ├── go.mod           ├── LICENSE           ├── middleware.go           ├── middleware_test.go           ├── mux.go           ├── mux_test.go           ├── old_test.go           ├── README.md           ├── regexp.go           ├── route.go           └── test_helpers.go

如你所见,gorilla/mux 已按预期添加到 pkgset $GOPATH 目录中,现在可用于使用此 pkgset 项目了。

GVM 让 Go 管理变得轻而易举

GVM 是一种直观且非侵入性的管理 Go 版本和包的方式。它可以单独使用,也可以与其他 Go 模块管理技术结合使用并利用 GVM Go 版本管理功能。按 Go 版本和包依赖来分离项目使得开发更加容易,并且减少了管理版本冲突的复杂性,GVM 让这变得轻而易举。

"如何使用GVM管理Go项目"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

版本 管理 项目 目录 命令 脚本 程序 系统 不同 内容 情况 环境 存储 检查 轻而易举 文件 方式 方法 更多 模块 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡豆 互联网新科技 广东万易互联网科技有限公司惠州分公司 互联网公司 科技公司 互联网金融科技创新 北京禾田雨橡互联网科技 互联网科技股有哪些 卓越科技互联网 招聘 海南购全球互联网科技 湖南洣水互联网科技有限公司扣款 上海电发互联网科技有限公司 银川新华互联网科技学校联系电话 佛山市翊博互联网络科技有限公司 工业互联网展湾科技股份有限公司 元气玛特互联网科技公司是外包吗 小米互联网科技园入驻 富国互联网金融科技混合基金 全球科技与互联网公司市值变化 云鲸互联网络科技有限公司 优雇互联网科技有限公司 万易互联网科技 狮子座互联网科技 安徽鑫晟辉互联网科技 智慧科技互联网 互联网5g黑科技有哪些 天津腾达互联网科技有限公司 互联网风格科技公司名称 陕西九四连强互联网科技有限公司 陕西彩京云互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司
0