Go 多版本管理工具

news/2025/2/23 2:38:05/

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 stable1.19.101.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 ls1.19.10
* 1.20.5

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

$ g ls-remote11.2.21.31.3.1...    // 省略若干版本1.19.101.20rc11.20rc21.20rc31.201.20.11.20.21.20.31.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.ppmy.cn/news/1123551.html

相关文章

Bug排查思路

遇到一个Bug&#xff0c;怎么排查&#xff1f;以下几个思路&#xff0c;希望能对大家有所启发 一、环境问题 1、开发的代码是否已更新 2、是否是缓存原因导致的&#xff08;强刷&#xff0c;手动清除缓存&#xff0c;web甚至可以直接用无恒模式查看页面&#xff09; 3、是否…

Spring面试题19:说一说Spring注解?什么是基于Java的Spring注解配置?什么是基于注解的容器配置?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring注解 Spring注解是一种在Spring框架中使用的特殊标记,用于在应用程序中声明特定的配置、行为或功能。注解可以应用于类、方法、字段…

web:[ACTF2020 新生赛]Include

前提知识 文件包含漏洞 php伪协议 题目 点开题目&#xff0c;页面只显示一个tips&#xff0c;点进去看看 点进去之后 没有别的提示&#xff0c;先看源代码&#xff0c;恩&#xff0c;什么都没有 再看一下点进tips显示的页面&#xff0c;发现url中 flag可能就藏在这个页面中&…

SpringSecurity - 认证与授权、自定义失败处理、跨域问题、认证成功/失败处理器

SpringSecurity 文章目录 SpringSecurity一、 简介二、快速入门2.1 maven坐标2.2 访问请求 三、认证与授权3.1 认证3.1.1 登录检验流程3.1.2 SpringSecurity 完整流程3.1.3 认证流程详解3.1.4 校验3.1.5 要解决的问题3.1.6 准备工作3.1.7 实现3.1.7.1 数据库校验用户3.1.7.1.1 …

数字IC笔试千题解--填空题篇(四)

前言 出笔试题汇总&#xff0c;是为了总结秋招可能遇到的问题&#xff0c;做题不是目的&#xff0c;在做题的过程中发现自己的漏洞&#xff0c;巩固基础才是目的。 所有题目结果和解释由笔者给出&#xff0c;答案主观性较强&#xff0c;若有错误欢迎评论区指出&#xff0c;资料…

一文掌握 HardwareBuffer 的使用

该原创文章首发于微信公众号:字节流动 未经作者(微信ID:Byte-Flow)允许,禁止转载 HardwareBuffer 是什么 Android HardwareBuffer 是 Android 操作系统提供的一种用于共享和传递图形和图像数据的高性能、低延迟的跨进程内存缓冲区。它在 Android 8.0(API 级别 26)中首次…

C#8.0本质论第六章--类

C#8.0本质论第六章–类 类可以理解为对象的模板。面向对象编程的一个关键优势就是不必从头创建新程序&#xff0c;而是可以将现有的一系列对象组装到一起。 6.1类的声明和实例化 虽然并非必须&#xff0c;但一般应该将每个类都放到他自己的文件中&#xff0c;用类名对文件进…

学习Nano编辑器:入门指南、安装步骤、基本操作和高级功能

文章目录 使用Nano编辑器入门指南引言1.1 关于Nano编辑器1.2 Nano的起源和特点 安装Nano2.1 在Debian/Ubuntu系统上安装Nano2.2 在CentOS/RHEL系统上安装Nano2.3 在其他Linux发行版上安装Nano 启动Nano3.1 命令行启动Nano3.2 打开文件 Nano的基本操作4.1 光标移动和选择文本4.2…