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

相关推荐
wdxylb14 分钟前
Linux下编写第一个bash脚本
开发语言·chrome·bash
幽兰的天空17 分钟前
Python实现的简单时钟
开发语言·python
这题怎么做?!?25 分钟前
模板方法模式
开发语言·c++·算法
幽兰的天空1 小时前
简单的Python爬虫实例
开发语言·爬虫·python
冷眼看人间恩怨1 小时前
【Java】揭秘网络编程:深入探索其无尽奥秘与魅力
java·开发语言·tcp/ip·udp·tcp
※※冰馨※※1 小时前
Unity3D 鼠标移动到按钮上显示信息
开发语言·unity·c#
Algorithm15762 小时前
JVM是什么,与Java的关系是什么,以及JVM怎么实现的跨平台性
java·开发语言·jvm
Gnevergiveup2 小时前
2024网鼎杯青龙组Web+Misc部分WP
开发语言·前端·python
边疆.2 小时前
C++类和对象 (中)
c语言·开发语言·c++·算法
yy_xzz2 小时前
QT编译报错:-1: error: cannot find -lGL
开发语言·qt