三年前的旧文,最新要切版本,翻了出来,现在依然有用,分享出来~
当前 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 环境完全独立的效果。