Windows 下 golang 多版本管理

三年前的旧文,最新要切版本,翻了出来,现在依然有用,分享出来~

当前 golang 的各个版本还有些不兼容的问题,最近遇到 go-micro 框架只能运行在 go1.13~1.14 的版本情况,而我本地 windows 环境安装的 Golang 版本为 1.15,所以就开始考虑如何在机器上同时保留多个 Golang 的版本环境。

一、建目录,改 PATH

思路:下载需要版本的 golang 安装包,利用 PATH 环境变量的变化来调整不同版本环境。

(一)下载多个版本包

  • 下载对应版本的 Golang 安装包,修改目录名称如下:

(二)配置

1. 添加 GPPATH 环境变量

环境变量配置参考:添加或修改环境变量

为了使不同版本 go 环境可以共用同一套 go get 的包,添加环境变量 GOPATH,指定任意目录,如:

2. 添加 %GOPATH%/bin 环境配置

PATH 添加 %GOPATH%/bin,保证安装的 golang 插件可以全局使用。

如添加 go1.14 的环境变量:D:\office\Go1.14\bin,新开终端验证如下:

注意:

1. PATH 环境变量存在多个地址时,用 ; 隔开;

2. Windows 环境下修改环境变量后,需要重启或新开终端才会生效。

3. 命令行设置 go env 环境

打开 CMD 命令行,执行以下命令:

# 路径和环境变量的路径保持一致
set GOROOT=D:\office\Go1.14 set GOPATH=D:\file\goSpace

4. Goland 设置

如果使用 goland 编辑器,打开 setting->Go 设置对应的 GOROOT 和 GOPATH。

二、Golang官方建议

# get 其他版本的 golang
$ go get golang.org/dl/go1.15.2


# 下载,新安装的 go1.15.2.exe 在 %USERPROFILE%\go\bin 目录下
$ go1.15.2 download


# 检查
$ go1.15.2 version
go version go1.15.2 windows/amd64


# 默认的 golang 版本
$ go version
go version go1.13.14 windows/amd64
这种方案每次使用指定版本 go 环境都需要带上对应的版本号,在使用起来很不友好。

三、 g 工具

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

(一)安装

  • 下载 g 稳定最新版 工具,选择下面红框任意一个即可:

  • 解压下载压缩包,将 g.exe 存放在任意文件夹下,这里存在 D:\office\Go 下,并将该目录加入环境变量 PATH 中,新开终端验证:

(二)配置

如果不需要完全隔离每个 go 版本 import 的包,则可以按照第一种 “建目录,改PATH” 方案中共用 GOPATH 的方式,则无需进行如下配置。

  • 环境变量将原有的 %GOPATH%\bin 或 从 PATH 中移除,新增:C:\Users\Administrator\.g\go\bin
  • 调整 GROOT、GOPATH 路径为:C:\Users\Administrator\.g\go
  • 设置 go 环境变量:
set GOROOT=C:\Users\Administrator\.g\go
set GOPATH=C:\Users\Administrator\.g\go
  • 如果使用 goland 编辑器,打开 setting->Go 设置对应的 GOROOT 和 GOPATH。

(三)使用

  • 查询当前可供安装的 stable (稳定版)状态的go版本
$ g ls-remote stable   
1.13.15   
1.14.7
  • 查询当前可供安装的所有 go 版本
$ g ls-remote   
1   
1.2.2   
1.3rc1   
1.3rc2   
1.3   
……    // 省略
  • 安装目标 go 版本,示例安装 1.14.7
$ g install 1.14.7 
Downloading 100% |███████████████| (119/119 MB, 9.939 MB/s) [12s:0s] 
Computing checksum with SHA256 
Checksums matched 
Now using go1.14.7
  • 查询已安装到本地的 go 版本
$ g ls 
* 1.14.7  // * 标识当前正在使用的版本   
  1.16.1
  • 切换和使用另一个已安装的 go 版本
$ g use 1.16.1
go version go1.16.1 windows/amd64
  • 卸载一个已安装的 go 版本,如卸载 1.14.7
$ g uninstall 1.14.7 
Uninstalled go1.14.7

(四)总结分析

g 工具本质上其实和第一个建不同版本目录改 PATH 是一个原理,可以看一下 C:\Users\Administrator\.g 目录:

downloads 文件夹是已下载每个版本的压缩包:

version 文件夹则是每个 go 版本安装包解压后的文件夹,文件夹名称改为了版本信息:

可以看到,go 文件夹其实是一个快捷方式,g 工具根据使用的不同版本,对应其实是更改这个 g 文件夹下的快捷方式映射到 version 中不同的文件夹而已,比如目前我正在使用 1.16.1 版本,查看 go 文件夹快捷方式属性:

明显能看到映射目标为:C:\Users\Administrator\.g\versions\1.16.1。

以此,切换不同版本后,安装的 go 插件都可能不同,通过不同的版本文件夹分隔,实现 go 环境完全独立的效果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ [项目] 愤怒的小鸟

现在才发现C游戏的支持率这么高,那就发几篇吧 零、前情提要 此篇为 制作,由于他没有CSDN,于是由我代发 一、基本介绍 支持Dev-C5.11版本(务必调为英文输入法),基本操作看游戏里的介绍,怎么做的……懒得说,能看懂就看注释,没有的自己猜,如果你很固执……私我吧 …

蘑菇书(EasyRL)学习笔记(1)

1、强化学习概述 强化学习(reinforcement learning,RL)讨论的问题是智能体(agent)怎么在复杂、不确定的环 境(environment)里面去最大化它能获得的奖励。如下图所示,强化学习…

huggingface的数据集下载(linux下clone)

1. 安装lfs sudo apt-get install git-lfs 或者 apt-get install git-lfs 2. git lfs install git lfs install 3. git clone dataset包 第2,3步骤的截图如下:

Kubernetes学习笔记

Kubernetes学习笔记 API格式前缀API组API版本 Pod概念优势局限性创建Pod ReplicationController概念配置Pod模板 Kubernetes架构概述节点定义管理节点名称唯一性节点自注册手动节点管理节点状态节点心跳节点控制器逐出速率限制资源容量跟踪 API Kubernetes把其管理的资源均视为…

现代数字信号处理I-P4 CRLB+LMMSE 学习笔记

目录 学习资料视频链接: 1. 估计参数的CRLB回顾 2. 参数变换下的CRLB拓展 3. 矢量参数下的CRLB扩展 3.1 矢量参数下的CRLB公式 3.2 两个矩阵不等式关系的意义说明 3.3 矢量参数下CRLB公式的证明过程 4. 线性估计 重点注意事项:此处的线性估计&am…

零磁通电流探头的原理

在电力电子和自动化控制领域,电流测量的准确性至关重要。传统的开环式电流探头,尽管在交流电流测量中表现出色,但在直流或大电流测量时,常面临磁芯饱和、剩磁及温度变化带来的测量误差问题。为此,零磁通电流探头&#…

​​Spring6梳理17——基于XML的自动装配

以上笔记来源: 尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc 目录 ①引入 ②场景模拟 2.1 创建UserController类文件 2.2 创建UserService接口文件 2…

同济大学计算机考研

文章目录 一、初试1.院校情况1.复试名单2.报录比3.学硕人数 二、复试(一) 数据库2016复试题一、选择题 (Multiple Choices)二、简答题 2018复试题一、选择题(一)数据库:1-10(二)C语言&#xff1…

植物大战僵尸杂交版游戏分享

植物大战僵尸杂交版游戏下载:夸克网盘分享 无捆绑之类的隐形消费,下载即玩

【软件工程】过程和生命周期的建模

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 过…

springboot整合xxl-job实现定时任务

搭建调度中心xxl-job-admin 下载调度中心项目 gitee github 注: 下载项目的版本应与集成项目pom引用xxl-job版本号对应上。 执行初始化数据库SQL sql路径: doc/db/tables_xxl_job.sql XXL-JOB调度模块基于自研调度组件并支持集群部署,调…

flv格式如何转换mp4?将flv转换成MP4格式的9种转换方法

flv格式如何转换mp4?在进行flv转MP4的转换之前,了解两种格式的基本特点和差异也是至关重要的。flv格式以其流媒体传输的高效性和对Flash Player的依赖而闻名,而MP4则以其广泛的兼容性、高质量的音视频同步以及灵活的编码选项而著称。通过对比…

vue mixins使用示例

混入 (mixins): 是一种分发 Vue 组件中可以复用功能灵活的方式。混入对象可以包含任意组件的选项。当组件使用混入对象的时候,所有混入对象的选项将被混入该组件本身的选项。 使用示例: 定义使用的mixins对象 export const HelloWorldMixin {data() {r…

Chromium 沙盒Sandbox源码介绍(3)

本篇主要说下沙箱的环境变量策略【Environment】: 一、环境变量: getEnvironmentStrings 函数返回指向内存块的指针,该内存块包含调用进程的环境变量 (系统和用户环境变量) getEnvironmentStrings 函数 (processenv.h) - Win32 apps | Mic…

ubuntu2204配置cuda

ubuntu2204配置cuda ✅系统版本:ubuntu22.04 LTS ✅显卡:英伟达2070S ✅CPU:i9 10900 ✅主板:戴尔品牌机 教程💨💨💨💨: ps:本人按照该方法一遍成功&#…

EasyX:初始化绘图窗口initgraph() 的使用

前言 学习使用EasyX图形库的initgraph窗口函数。 一、创建新项目 二、创建C空项目 三、找个地方存一下,创建 四、如果左边的框框找不到 五、点视图,然后点解决方案管理器,左边的框框就出来了 六、源文件添加新建项 七、给文件取个名&#x…

qt QPushButton详解

QPushButton是Qt Widgets模块中的一个基本控件,用于提供可点击的按钮。它是用户界面中最为常见和常用的控件之一,通过点击按钮,用户可以触发特定的应用程序操作。 重要方法 QPushButton(const QIcon &icon, const QString &text, QWi…

数据通信与网络课程展示图谱问答展示系统

💡 你是否在学习“数据通信与网络”时感觉知识点分散,难以整理?学了后面忘记前面,知识点的关联也难以梳理?别担心!我们公司推出的【数据通信与网络课程展示图谱问答系统】帮你一次性解决所有问题&#xff0…

手撕反向传播

关于二分类的交叉熵损失部分数学推导过程。 有些地方加以注释,公式太多懒得MD格式了 #%% import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import datasetsiris_data datasets.load_iris() in_put_data iris_data.data corr…

Golang | Leetcode Golang题解之第494题目标和

题目&#xff1a; 题解&#xff1a; func findTargetSumWays(nums []int, target int) int {sum : 0for _, v : range nums {sum v}diff : sum - targetif diff < 0 || diff%2 1 {return 0}neg : diff / 2dp : make([]int, neg1)dp[0] 1for _, num : range nums {for j …