使用 GVM 搭建可维护的 Golang 开发环境
当你想完成 Golang 开发环境的便捷安装以及随时更新和保障多个版本的 Golang 共存的时候,就需要使用到 Golang 的专门版本管理工具 ——gvm
本篇随笔记录了在 Ubuntu 下安装使用 gvm 的过程
Gvm 的下载
我们可以使用国内镜像下载包含安装脚本的仓库代码,然后直接执行安装脚本,来完成安装
先使用 git clone 下载完整的软件仓库:
git clone https://gitcode.net/soulteary/gvm.git
指定 SRC_REPO 参数为国内镜像地址,然后运行安装脚本:
SRC_REPO=https://gitcode.net/soulteary/gvm.git bash gvm/binscripts/gvm-installer
当脚本运行完毕,我们将会看到上文中提到过的日志输出,此刻 gvm 就安装完毕啦。
为了更方便的使用 gvm,我们还需要进行一些配置。
配置 gvm 加速 Golang 下载/切换
gvm 支持使用两种方式来下载 “Golang”,然而不论是“下载源码编译安装”,还是下载适合当前操作系统的“预编译好的二进制文件”,我们都需要访问官方地址。
为了避免下载过程中因为网络问题,出现下载慢,或者无法下载的情况,节约我们的时间,我们需要对 gvm 进行一些简单的配置。
我们可以在当前使用的 “SHELL” 的 “rc” 文件中(比如.bashrc 或者 .zshrc),添加下面的内容,来在当前的环境中让 gvm 命令生效,同时,让我们能够使用更快的下载源来下载我们所需要的 “Golang”:
export GO_BINARY_BASE_URL=https://golang.google.cn/dl/
[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"
export GOROOT_BOOTSTRAP=$GOROOT
在“rc” 文件中添加了上述内容后,需要重启终端
export GO_BINARY_BASE_URL=https://golang.google.cn/dl/
命令中的 GO_BINARY_BASE_URL 变量,定义了我们将从何处下载 Golang 的二进制文件或源码压缩包进行安装。当然,你也可以将其替换为下面的任意一个。
# 官方地址
https://go.dev/dl/
# 官方国内镜像地址
https://golang.google.cn/dl/
# 阿里云镜像
https://mirrors.aliyun.com/golang/
# 中科大镜像
http://mirrors.ustc.edu.cn/golang/
[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"
这条命令,是根据软件的实际安装情况来选择性加载 gvm。相比较前文中安装完毕 gvm 日志输出内容推荐我们直接使用 source 命令加载 gvm,这样可以更安全的执行命令,当且仅当 ~/.gvm 存在的时候才会加载程序,将 gvm 注册到你当前的 SHELL 环境中。
export GOROOT_BOOTSTRAP=$GOROOT
最后一条命令,则是为了确保 Golang 使用源码编译安装时,不会出错(golang 1.14后需要 )
使用 gvm
gvm 是一个特别简单的命令,我们日常使用中其实只需要记得两个命令就好,第一个是 gvm install,第二个是 gvm use。
假设我们想安装 Golang 最新版本 1.18.3,那么只需要执行下面的命令:
gvm install go1.18.3 -B
如果你没有装 CURL 的话还需要自行安装


在执行完毕命令之后,稍等片刻,当我们看到 Installing go1.18.3 from binary source 这条日志输出结果后,就意味着 Golang 已经被下载完毕了。如果你希望使用编译源码的方式安装 Golang 的话,可以去掉上面命令中的-B 参数:
gvm install go1.18.3
虽然我们已经完成了 Golang 1.18.3 的安装,但是目前我们还不能直接使用它,需要再执行一条命令,将这个版本的 Golang “激活”:
gvm use go1.18.3 --default
在执行完命令之后,我们能够立刻看到类似 Now using version go1.18.3 的日志输出结果,接下来我们就可以随意的使用 go 这个命令了。
我们可以使用 go version 来验证刚刚下载的程序是否符合我们的诉求

安装过程参考https://zhuanlan.zhihu.com/p/537292132
以上
使用 GVM 搭建可维护的 Golang 开发环境的更多相关文章
- Golang环境搭建,Notepad++配置Golang开发环境,Golang发送邮件
http://blog.csdn.net/u011012932/article/details/53102264 http://blog.csdn.net/u011012932/article/det ...
- Windows下visual studio code搭建golang开发环境
Windows下visual studio code搭建golang开发环境 序幕 其实环境搭建没什么难的,但是遇到一些问题,主要是有些网站资源访问不了(如:golang.org),导致一些包无法安装 ...
- Golang开发环境搭建-Vim篇
一.一个干净的环境 找个干净的基础环境,方便确认每个搭建步骤后的效果: Ubuntu 14.04 x86_64 vim version 7.4.52 go version go1.4beta1 lin ...
- 用grunt搭建自动化的web前端开发环境实战教程(详细步骤)
用grunt搭建自动化的web前端开发环境实战教程(详细步骤) jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用!前端自动化, ...
- linux golang开发环境配置(离线方式)
<获取开发工具> 到https://www.golangtc.com/download 下载安装包, 根据自己的系统选择合适的开发包,这里选择go.1.9.2.linux-amd6 ...
- window / Linux 下 Golang 开发环境的配置
一直专注于使用python语言进行程序开发,但是却又一直被它的性能问题所困扰,直到遇到了天生支持高并发的Golang,这似乎也成了学习go语言最理所当然的理由.下面介绍下Go语言开发环境搭建的步骤: ...
- 使用grunt搭建自动化的web前端开发环境
使用grunt搭建自动化的web前端开发环境 我们一定经常听过grunt和gulp,它们都是用于搭建自动化的web前端开发环境的,这里主要介绍grunt的使用,值得一提的是,jQuery.bootst ...
- 一.1搭建跨平台的统一python开发环境
搭建跨平台的统一python开发环境: 使用开发环境的好处: 可不用在服务器上直接修改源代码---写的代码首先得入版本库(放git或giitlab中),在本地写代码提交到git中.然后在服务器上git ...
- 利用grunt-contrib-connect和grunt-connect-proxy搭建前后端分离的开发环境
前后端分离这个词一点都不新鲜,完全的前后端分离在岗位协作方面,前端不写任何后台,后台不写任何页面,双方通过接口传递数据完成软件的各个功能实现.此种情况下,前后端的项目都独立开发和独立部署,在开发期间有 ...
- 【前端福利】用grunt搭建自动化的web前端开发环境-完整教程
jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前端开发人员,如果你现在还不知道grunt或者听说过 ...
随机推荐
- RabbitMQ宕机了怎么办?
RabbiMQ宕机会导致消息丢失! 解决办法:可以做消息持久化. 非持久化消息:只有非持久化消息在RabbitMQ宕机时会发生消息丢失. 持久化消息:持久化的消息会在接收后被保存到磁盘中,所以Rabb ...
- SQL-运算
dual表可以进行运算select * from dual; 算数运算 + - * /select 5 + 6 as aaa ,6 - 3 as bbb ,5 * 7 as ccc ,9/2 as d ...
- XSS跨站脚本攻击(Cross Site Scripting)
XSS是跨站脚本攻击(Cross Site Scripting),不写为CSS是为了避免和层叠样式表(Cascading Style Sheets)的缩写混淆,所以将跨站脚本攻击写为XSS. 攻击者可 ...
- scala的运算符
1.算数运算符 与java基本一样,只有个别细节不一样 (1).除法的区别:整数/整数 结果为整数(小数部分直接舍掉了):小数/整数 结果为小数: 例如:val result = 10.0 / 3 p ...
- python:包含’e’和‘-’的 str 转 float
from functools import reduce def str2float(s): s = s.split('.') a = s[0] b = s[1] if a[0] == '-': a ...
- element-ui的确认消息弹框校验;$prompt校验
this.$prompt('请输入您的姓名', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', inputPattern: /^.+$ ...
- cp 备份文件命令
cp -p system.sh ./bak2022/systecm.sh.bak_`date '+%Y%m%d'` (备份system.sh文件后缀以bak_年月日命令)cp -rf old copy ...
- CF527D 题解
题意:数轴上有 \(n\) 个点,第 \(i\) 个点的坐标为 \(x_i\),权值为 \(w_i\).两个点 \(i,j\) 之间存在一条边当且仅当 \(abs(x_i-x_j)\geq w_i+w ...
- python3中的负数整除、求余问题
注:小白问题,大神们请忽略先看示例,非整除: >>> -10/3-3.3333333333333335>>> 10/-3-3.3333333333333335> ...
- docker临时指定时区
如果制作镜像时,未配置时区,默认指向了 UTC ,可使用类似如下方式临时指向北京时间,或上海时间 docker exec -it --user=root gitlab-ce_12.2.4 ln -sf ...