Go 多版本管理工具

news2025/1/12 8:56:33

Go 多版本管理工具

文章目录

  • Go 多版本管理工具
    • 一、go get 命令
      • 1.1 使用方法:
    • 二、Goenv
    • 三、GVM (Go Version Manager)
    • 四、voidint/g
      • 4.1 安装
      • 4.2 冲突
      • 4.3 使用

在平时开发中,本地新旧项目并行开发的过程中,你大概率会遇到一个令人头疼的问题,如何同时使用两个不同版本的 Golang Runtime 进行开发呢?

一、go get 命令

这种方法有一个前提,那就是当前系统中已经通过标准方法安装过某个版本的 Go 了。

1.1 使用方法:

在项目中初始化 Go Modules:

go mod init <module-name>

go 版本安装/版本切换,安装不同版本的 Go:

go get golang.org/dl/go<x.y>
go<x.y> download
go<x.y> version

img

切换全局 Go 版本:

go<x.y> use

二、Goenv

官网:https://github.com/go-nv/goenv

Goenv 是另一个 Go 多版本管理工具,它的工作原理与其他语言的版本管理工具(如 Ruby 的 RVM 和 Python 的 pyenv)类似。以下是使用 Goenv 的基本步骤:

安装 Goenv(你需要先安装 Git):

git clone https://github.com/syndbg/goenv.git ~/.goenv

将 Goenv 添加到你的 shell 配置文件(例如 ~/.bashrc~/.zshrc)中:

echo 'export GOENV_ROOT="$HOME/.goenv"' >> ~/.bashrc
echo 'export PATH="$GOENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(goenv init -)"' >> ~/.bashrc

安装你需要的 Go 版本:

goenv install go1.x.x

使用特定版本的 Go:

goenv global go1.x.x

三、GVM (Go Version Manager)

官网:https://github.com/moovweb/gvm

GVM 是一个流行的 Go 多版本管理工具,它允许你在同一台机器上安装和切换不同版本的 Go。以下是使用 GVM 的基本步骤:

安装 GVM:

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

安装你需要的 Go 版本:

gvm install go1.x.x

使用特定版本的 Go:

gvm use go1.x.x

四、voidint/g

4.1 安装

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

  • Linux/macOS(适用于 bash、zsh)

    # 建议安装前清空`GOROOT`、`GOBIN`等环境变量
    curl -sSL https://raw.githubusercontent.com/voidint/g/master/install.sh | bash
    echo "unalias g" >> ~/.bashrc # 可选。若其他程序(如'git')使用了'g'作为别名。
    source "$HOME/.g/env"
    
  • Windows(适用于 pwsh)

    iwr https://raw.githubusercontent.com/voidint/g/master/install.ps1 -useb | iex
    

4.2 冲突

这里如果你是 oh-my-zsh 的用户,那么你还需要做一件事,就是解决全局的 g 命令的冲突,解决的方式有两种,第一种是在你的 .zshrc 文件末尾添加 unalias

echo "unalias g" >> ~/.zshrc # 可选。若其他程序(如'git')使用了'g'作为别名。
# 记得重启 shell ,或者重新 source 配置

第二种,则是调整 ~/.oh-my-zsh/plugins/git/git.plugin.zsh 中关于 g 的注册,将其注释或删除掉:

# alias g='git'

我的 .zshrc 中的完整配置:

# 我的 g 的bin目录调整到了 .gvm ,所以你可能需要一些额外的调整
export PATH="${HOME}/.gvm/bin:$PATH"
export GOROOT="${HOME}/.g/go"
export PATH="${HOME}/.g/go/bin:$PATH"
export G_MIRROR=https://gomirrors.org/

4.3 使用

查询当前可供安装的stable状态的 go 版本

$ g ls-remote stable
  1.19.10
  1.20.5

安装目标 go 版本1.20.5

$ g install 1.14.7
Downloading 100% [===============] (92/92 MB, 12 MB/s)               
Computing checksum with SHA256
Checksums matched
Now using go1.20.5

查询已安装的 go 版本

$ g ls
  1.19.10
* 1.20.5

查询可供安装的所有 go 版本

$ g ls-remote
  1
  1.2.2
  1.3
  1.3.1
  ...    // 省略若干版本
  1.19.10
  1.20rc1
  1.20rc2
  1.20rc3
  1.20
  1.20.1
  1.20.2
  1.20.3
  1.20.4
* 1.20.5

切换到另一个已安装的 go 版本

$ g use 1.19.10
go version go1.19.10 darwin/arm64

卸载一个已安装的 go 版本

$ g uninstall 1.19.10
Uninstalled go1.19.10

清空 go 安装包文件缓存

$ g clean 
Remove go1.18.10.darwin-arm64.tar.gz
Remove go1.19.10.darwin-arm64.tar.gz
Remove go1.20.5.darwin-arm64.tar.gz

查看 g 版本信息

g version 1.5.0
build: 2023-01-01T21:01:52+08:00
branch: master
commit: cec84a3f4f927adb05018731a6f60063fd2fa216

更新 g 软件本身

$ g self update
You are up to date! g v1.5.0 is the latest version.

卸载 g 软件本身

$ g self uninstall
Are you sure you want to uninstall g? (Y/n)
y
Remove /Users/voidint/.g/bin/g
Remove /Users/voidint/.g

总之,选择其中一个工具并根据你的需求进行设置。这些工具都可以有效地管理不同版本的 Go Runtime,使你能够轻松地在不同项目中切换和使用不同的 Go 版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatisPlus 底层用 json 存储,Java 仍然使用 对象操作

PO 类的字段定义为一个对象&#xff0c;然后使用以下注解修饰 TableField(typeHandler JacksonTypeHandler.class) 当然 jsonTypeHandler 有多种可以选择

【多尺度无监督:Pansharpening】

Mun-GAN: A Multiscale Unsupervised Network for Remote Sensing Image Pansharpening (Mun-GAN&#xff1a;一种多尺度无监督遥感图像泛锐化网络) 在遥感图像融合中&#xff0c;全色锐化是一种遥感图像融合方法&#xff0c;旨在融合全色&#xff08;PAN&#xff09;图像和多…

Jmeter对图片验证码的处理

​jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入&#xff0c;而且每次登录时图片验证码都是随机的&#xff1b;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段&#xff0c;然后再登录接口中使用&#xff1b; 通过jmeter对图片验证…

基于微信小程序的小区服务管理系统设计与实现(源码+lw+部署文档+讲解等)

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

Java8实战-总结33

Java8实战-总结33 重构、测试和调试使用 Lambda 重构面向对象的设计模式策略模式模板方法 重构、测试和调试 使用 Lambda 重构面向对象的设计模式 新的语言特性常常让现存的编程模式或设计黯然失色。比如&#xff0c; Java 5中引入了for-each循环&#xff0c;由于它的稳健性和…

云端IDE的技术选型1

背景 考虑到以下几点&#xff0c;准备给低代码平台开发一套云端的IDE&#xff1a; 桌面端IDE&#xff1a;vs code 或 idea&#xff0c;都有需要开发人员安装ide&#xff0c;以及配置环境很多时候&#xff0c;配置开发环境是个非常曲折过程&#xff0c;经常出现版本不匹配&…

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(五)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 模型训练1&#xff09;数据集分析2&#xff09;数据预处理3&#xff09;模型创建4&#xff09;模型训练5&#xff09;获取特征矩阵 2. 后端Django1&#xff09;路由文件2&#xff09;视图层文件3&#xff09;项目…

GitHub上标星23K+的Redis进阶笔记(应用+原理+集群+拓展+源码)

先来看几道Redis面试题&#xff1a; redis为什么是key&#xff0c;value的&#xff0c;为什么不是支持SQL的&#xff1f;redis是多线程还是单线程&#xff1f;&#xff08;回答单线程的请回吧&#xff0c;为什么请回&#xff0c;请往下看&#xff09;redis的持久化开启了RDB和…

9.25day5---Qt

登录页面设计&#xff0c;建立用户注册以及登录的数据库&#xff0c;数据库保存用户名和密码 &#xff08;ps:本篇只完成了登录功能&#xff0c;其他功能&#xff0c;请见下篇嘿嘿。&#xff09; 再次注册则失败&#xff1a; 代码如下&#xff1a; 头文件&#xff1a; 登录…

Android字体大小dp,sp,px系统设置字体大小变化表现

Android字体大小dp,sp,px系统设置字体大小变化表现 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"andr…

14基于MATLAB的鲸鱼优化VMD参数,以熵值为适应度函数,对VMD参数惩罚因子和层数进行寻优,确定最优值并进行信号分解,程序已调通,可以直接运行。

基于MATLAB的鲸鱼优化VMD参数&#xff0c;以熵值为适应度函数&#xff0c;对VMD参数惩罚因子和层数进行寻优&#xff0c;确定最优值并进行信号分解&#xff0c;程序已调通&#xff0c;可以直接运行。

Idea操作Git合并另一个分支的部分提交

现有master、dev两个分支&#xff0c;master有提交1、2、3、4、5、6、7&#xff0c;dev是从master提交的3拉出来的分支&#xff08;Reset Current Branch to Here…&#xff0c;Mixed模式&#xff09;&#xff0c;有提交1、2、3&#xff0c;现在的需求是dev分支只需要合并maste…

解释器风格架构C# 代码

/*解释器风格架构是一种基于组件的设计架构&#xff0c;它将应用程序分解为一系列组件&#xff0c;每个组件负责处理特定的任务。这种架构有助于提高代码的可维护性和可扩展性。以下是如何使用C#实现解释器风格架构的步骤&#xff1a;定义组件&#xff1a;首先&#xff0c;定义…

10.2servlet基础2

一.SmartTomcat 1.第一次使用需要进行配置. 二.异常处理 1.404:浏览器访问的资源,在服务器上不存在. a.检查请求的路径和服务器配置的是否一致(大小写,空格,标点符号). b. 确认webapp是否被正确加载(检查web.xml没有/目录错误/内容错误/名字拼写错误)(多多关注日志信息). 2…

v-md-editor踩坑记

1、prismjs is not a function Vue3vite。在vueprees主题中&#xff0c;安装扩展代码高亮语音包运行失败。 解决方案&#xff1a; 查看下载好的本地包&#xff0c;尝试解构使用&#xff0c;执行成功 import { defineConfig } from vite import vue from vitejs/plugin-vue …

Vue系列(四)之 Vue路由介绍和Node.js的环境搭建

目录 一. Vue路由 1.1 Vue路由是什么 1.2 SPA是什么 1.3 Vue路由的使用步骤 二. Node.js环境搭建 2.1 Node.js是什么 2.2 npm是什么 2.3 Node.js环境搭建 1. 下载Node.js 2. 解压 3. 配置环境变量 4. 配置npm全局模块路径和cache默认安装位置 5. 修改npm镜像提高下…

蓝桥杯每日一题2023.9.12

3491. 完全平方数 - AcWing题库 题目描述 分析 完全平方数的一个特点&#xff1a; 所有的质因子的个数为偶数。eg1.9的质因子为3&#xff0c;3的个数为2&#xff0c;得到了9&#xff08;3*39&#xff09; eg2.81的质因子为3&#xff0c;3的个数为4&#xff0c;得到81&#…

安卓逆向 - EdXposed LSPosed VirtualXposed

一、引言 接上篇&#xff1a;安卓逆向 - Xposed入门教程_小馒头yy的博客-CSDN博客 我们介绍了Xposed入门安装使用&#xff0c;但是只支持到Android 8&#xff0c;并且安装模块需要重启。今天我们来看看Xposed的其他版本。 二、各种Xposed框架对比 1、Xposed 只支持到安卓8&…

python+django美食菜谱分享网站系统平台

开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm .本系统采用了nodejs语言的vue框架&#xff0c;数据采用MySQL数据库进行存储。结合B/S结…

【数据结构】哈希表(详)

文章目录 前言正文一、基本概念二、基本原理1.哈希函数1.1直接定址法&#xff08;常用&#xff09;1.2除留余数法&#xff08;常用&#xff09;1.3 平方取中法&#xff08;了解&#xff09;1.4 折叠法(了解)1.5 随机数法(了解)1.6数学分析法(了解) 2.哈希冲突2.1 平均查找长度2…