Go 多版本管理工具

2023-09-21 20:51:17

Go 多版本管理工具


在平时开发中,本地新旧项目并行开发的过程中,你大概率会遇到一个令人头疼的问题,如何同时使用两个不同版本的 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 版本。

更多推荐

Spring常考知识点(IOC、事务、容器等)

Spring需要理解的问题谈谈你对IOC的理解单例Bean和单例模式Spring事务传播机制Spring事务什么时候会失效Spring中的Bean创建的⽣命周期有哪些步骤Spring中Bean是线程安全的吗ApplicationContext和BeanFactory有什么区别Spring中的事务是如何实现的Spring

iOS自动化测试方案(一):MacOS虚拟机保姆级安装Xcode教程

文章目录一、环境准备二、基础软件三、扩展:usb拓展插件一、环境准备1、下载VMware虚拟机的壳子,安装并注册软件(可以百度注册码),最新版本:v172、下MacOS系统iOS镜像文件,用于vmware虚拟机安装,当前镜像最新版本:v11.6二、基础软件1、MacOS系统找到AppStore,这点同iphone操作,

.NET的CancellationTokenSource和ManualResetEvent结合使用

一、CancellationTokenSource是C#中的一个类,用于取消异步操作。它提供了一种机制,可以取消一个或多个异步操作。CancellationTokenSource包含以下主要方法:Cancel():该方法会取消所有挂起的操作,并引发OperationCanceledException异常。如果在调用Ca

Linux系统编程6(线程互斥,锁,同步,生产消费模型)

上篇文章介绍完线程的概念后,我们将在这篇文章中初步探讨线程编程以及线程应用中的问题,这篇文章将以抢票系统为例,贯穿整篇文章。笔者将介绍在多线程编程中会出现的问题,什么是同步?什么是互斥?为什么多线程编程常有加锁的概念,什么又是生产者和消费者模型,读完这篇文章,你会得到相应的答案,笔者这里强烈建议各位把文中给出的demo

App Store上线规范及流程

上线一个应用到AppStore需要遵循苹果的规范和流程,以确保应用的质量和安全性。以下是上线应用到AppStore的一般规范和流程,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。1.开发和测试:在上线应用之前,确保应用已经经过了充分的开发和测试阶段。这包括功能测试、性能测试、兼容性

Python学习之——str/unicode/bytes

Python学习之——str/unicode/bytes参考字符串和字节串区分Unicode和Encodingspython2python3一个典型的问题参考Pythonstrvsunicodetypes谈谈python2,3中的str、unicodeUnicode编码及UTF-32,UTF-16和UTF-8https

【Oracle】Oracle系列之二--Oracle数据字典

文章目录往期回顾前言1.什么是Oracle数据字典2.数据字典的内容(1)X$表(2)数据字典表、数据字典视图(3)动态性能视图3.数据字典应用示例(1)查询表的信息(2)查询索引的信息(3)查询用户的信息(4)查询表空间的信息(5)查询数据文件的信息(6)查询数据库的性能数据往期回顾【Oracle】Oracle系列–

【腾讯云 Cloud Studio 实战训练营】快速构建React完成点餐H5页面

一,前言1.1相关链接官网地址:CloudStudio官方文档地址:CloudStudio(云端IDE)简介|CloudStudio1.2CloudStudio(云端IDE)简介CloudStudio是基于浏览器的集成式开发环境(IDE),用户在使用CloudStudio时无需安装,随时随地打开浏览器就能在线编程,给开

React进阶

TODO1组件生命周期React组件生命周期|菜鸟教程(runoob.com)https://www.runoob.com/react/react-component-life-cycle.html什么是组件生命周期在React中,组件生命周期是指组件从创建到销毁期间经历的一系列阶段。在每个阶段,React给予我们不同

vue页面嵌入飞书网页组件,用于在类似ERP,OA等系统中展示在线文档

先展示最终效果(就是在vue页面中,内嵌了一块ifream页面):1.注册进入飞书开放平台,地址为:飞书开放平台2.进入开放平台后,选择--创建企业自建应用--创建网页应用,然后在主页面记住该应用的appId和appSecret参数,后面要用3.然后注意一点的是,因为后面的授权等逻辑我们一般用我们自己的文档做测试,但是

React antd Select 无法在disabled状态下选择并复制输入框内的内容情况分析及解决方案

文章目录背景问题分析解决思路一:会不会是由于在选择框内hover的时候出现的那个图标导致的解决思路二:会不会是这个span禁止复制解决思路三:去看看antd具体实现最终解决方案其他版本的解决方案antd3.*antd5.*背景在React项目开发中,我们经常会用到antd内的Select组件。有时候我们会在disabl

热文推荐