11

Windows 下 Golang 多版本管理

 3 years ago
source link: https://studygolang.com/articles/31072
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Windows 下 golang 多版本管理

当前 golang 各个版本还是有些许不兼容,最近遇到 go-micro 框架只能运行在 go 1.13 ~ 1.14 版本,而我Windows 下安装的又是 1.15 ,所以这时就需要安装 其他版本的golang,那么多版本 golang 如何在 Windows 上共存呢。

如果你在以下操作过程中,发现命令不生效,可以新开一个命令行窗口进行重试。

接下来会给大家介绍我尝试过的 4 种方案。 最好的方案是第四个,第一、三个方案失败了。

建目录 改 PATH

在Windows 安装好 golang,在 cmd 通过运行

$ go verstion
go version go1.15.2 windows/amd64

因为在 PATH 变量中配置了 gobin 目录, 所以在 cmd 能直接运行 go.exe

YjMJBzr.png!mobile

那么可不可以在不删除原有golang的情况下,新创建一个文件夹 C:\Go1.13 来存放我们新版本 golang。

运行新下载的安装程序

qqIJbmZ.png!mobile

选择 Uninstall ,没关系,我们已经把 PATH 去掉了,他找不到删除目录的。

输入我们给他配置的新目录

iyANRnz.png!mobile

安装后,我傻眼了,其他文件都安装在 C:\Go1.13 里,而这个却安装在了 C:\Go 目录里

222UbyM.png!mobile

而之前安装的 Go1.15.2 被卸载了。我就想创建个目录 C:\Go1.15.2 ,来重新安装 go 1.13.14, 我都把 PATH 删除了,它还是找到文件并删除了。

NJbQJzj.png!mobile

所以通过多个目录安装不同版本golang的办法是行不通的。

go get

这个是 官方建议

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

# 下载这一步不能少
$ 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

新安装的 go1.15.2.exe%USERPROFILE%\go\bin 目录下.

注意以上以上方法需要访问 google 的服务,所以你懂的。

你不仅要设置 http代理,还需要设置 git 的全局代理!

gvm

gvm

以下命令均在 git bash 环境运行,不是 windows cmd 环境!

本文 地址

安装

$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

# 代理访问
$ bash < <(curl -x socks5://james:[email protected]:8080 -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

Cloning from https://github.com/moovweb/gvm.git to /c/Users/wojia/.gvm
Created profile for existing install of Go at C:\Users\wojia\.g\go
Installed GVM v1.0.22

Please restart your terminal session or to get started right away run
 `source /c/Users/w/.gvm/scripts/gvm`

最后一行提示我们新开一个 terminal, 并运行命令 source /c/Users/w/.gvm/scripts/gvm , 我们来看看里面有什么动作。

$ cat /c/Users/w/.gvm/scripts/gvm

export GVM_ROOT=/c/Users/w/.gvm
. $GVM_ROOT/scripts/gvm-default

这显然是一个配置脚本。

配置

在 Windows 新增 GVM_ROOT 环境变量后,看看这个配置脚本。

cat $GVM_ROOT/scripts/gvm-default
unset GOROOT
unset GOARCH
unset GOOS
unset GOPATH
unset GOBIN

unset gvm_go_name
unset gvm_pkgset_name

mkdir -p "$GVM_ROOT/logs" > /dev/null 2>&1
mkdir -p "$GVM_ROOT/gos" > /dev/null 2>&1
mkdir -p "$GVM_ROOT/archive" > /dev/null 2>&1
mkdir -p "$GVM_ROOT/archive/package" > /dev/null 2>&1
mkdir -p "$GVM_ROOT/environments" > /dev/null 2>&1

export GVM_VERSION=$(cat "$GVM_ROOT/VERSION")
export PATH="$GVM_ROOT/bin:$PATH"
export GVM_PATH_BACKUP="$PATH"
[ -f "$GVM_ROOT/environments/default" ] && . "$GVM_ROOT/environments/default"
. "$GVM_ROOT/scripts/env/gvm"

也就是说需要配置 环境变量: GVM_VERSIONGVM_PATH_BACKUP , PATH

使用

配置好后,试一下。

$ gvm install go1.4
C:\Users\w\.gvm/scripts/functions: line 3: C:\Users\w\.gvm/scripts/function/*: No such file or directory

看来 shell 脚本没有针对 Windows 做调整,看来 gvm 没有对 Windows 做兼容。

g

最后来看看 g

安装

windows 的话,就直接上 github release 页面下载目标文件:

6NvyM37.png!mobile

直接将解压后的 g.exe 放入 PATH 目录下即可

$ g -v
g version 1.2.0

# 安装成功!

配置

针对 Windows 需要 将原有的 C:/Go/binPATH 中移除,新增 %USERPROFILE%\.g\go\bin

如果 Goland import 有报错,就需要调整下 GOROOT , GOPATH 配置

mYr2QrI.png!mobile

这里需要调整为 C:\Users\w\.g\go 目录。

使用

查询当前可供安装的 stable 状态的go版本

$ g ls-remote stable
  1.13.15
  1.14.7

安装目标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.7.6
  1.11.13
  1.12.17
  1.13.15
  1.14.6
* 1.14.7

查询可供安装的所有go版本

$ g ls-remote
  1
  1.2.2
  1.3
  1.3.1
  ...    // 省略若干版本
  1.14.5
  1.14.6
* 1.14.7
  1.15rc1

切换到另一个已安装的go版本

$ g use 1.14.6
go version go1.14.6 darwin/amd64

卸载一个已安装的go版本

$ g uninstall 1.14.7
Uninstalled go1.14.7

总结

就目前(2020年10月)来看, gWindows 上最好的 golang 多版本管理软件, golang 的官方方案也不错,不过运行 go 命令需要加版本号,容易和 shell 脚本耦合。

gvm 还未适配 Windows 。 而多开文件夹,改 PATH 就是个笑话了,大家图个乐。

参考

有疑问加站长微信联系

iiUfA3j.png!mobile

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK