Windows 下 golang 多版本管理

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

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

一、建目录,改 PATH

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

(一)下载多个版本包

(二)配置

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.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 环境完全独立的效果。

相关推荐
沐知全栈开发34 分钟前
C# 委托(Delegate)
开发语言
任子菲阳1 小时前
学Java第三十四天-----抽象类和抽象方法
java·开发语言
csbysj20202 小时前
如何使用 XML Schema
开发语言
R6bandito_2 小时前
STM32中printf的重定向详解
开发语言·经验分享·stm32·单片机·嵌入式硬件·mcu
earthzhang20212 小时前
【1007】计算(a+b)×c的值
c语言·开发语言·数据结构·算法·青少年编程
杨枝甘露小码2 小时前
Python学习之基础篇
开发语言·python
武文斌773 小时前
项目学习总结:LVGL图形参数动态变化、开发板的GDB调试、sqlite3移植、MQTT协议、心跳包
linux·开发语言·网络·arm开发·数据库·嵌入式硬件·学习
爱吃喵的鲤鱼3 小时前
仿mudou——Connection模块(连接管理)
linux·运维·服务器·开发语言·网络·c++
爱吃小胖橘3 小时前
Unity网络开发--超文本传输协议Http(1)
开发语言·网络·网络协议·http·c#·游戏引擎
郝学胜-神的一滴3 小时前
使用Linux的read和write系统函数操作文件
linux·服务器·开发语言·数据库·c++·程序人生·软件工程