13

Windows 下 Golang 多版本管理

 4 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.
neoserver,ios ssh client

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

Recommend

  • 43

    使用gvm管理golang版本遇到一个问题,就是我在.zshrc中设置了GOPATH,但是使用gvm切换后GOPATH又被gvm重新设置了,默认是$GVM_ROOT/pkgsets/go1.12.5/global。而我希望切换不同的GOROOT而GOPATH不变,因为我的项目代码都在原来的GOPATH中...

  • 30
    • www.tuicool.com 5 years ago
    • Cache

    Mac上的JDK多版本管理

    我的Mac上已经有一个JDK8的版本了,这不 JDK13 刚发布(2019-09-17),想快速的尝一尝鲜,就得安装多个版本的JD...

  • 38
    • studygolang.com 4 years ago
    • Cache

    Golang中管理程序的版本信息

    我们都知道在一些Golang写的程序中,默认会有 version 或 -v 相关的参数来输出软件版本信息,这些版本信息里可能包含软件版本,git中的commit记录,构建时间、构建环境等信息,那么这些信息都是如何在Golang程...

  • 23
    • studygolang.com 4 years ago
    • Cache

    使用 GVM 工具管理 Go 版本

    友情提示:此篇文章大约需要阅读 5分钟5秒,不足之处请多指教,感谢你的阅读。 订阅本站 在 Go 项目开发中,团队要保持开发版本一致,怎么能够快速的安装及部...

  • 27

    作者: HelloGitHub-追梦人物 API 不可能一成不变,无论是新增或者删除已有 API,都会对调...

  • 21
    • mongoing.com 4 years ago
    • Cache

    MongoDB版本管理

    重要提示 请始终升级到所发布系列的最新稳定版本。 MongoDB的版本...

  • 11
    • netsecurity.51cto.com 4 years ago
    • Cache

    CVE-2021-3115——Golang Windows版本 RCE漏洞

    1月,谷歌工程师修复了Go语言(Golang)中的一个远程代码执行漏洞。该漏洞CVE编号为CVE-2021-3115,漏洞主要影响使用go get命令的Windows Go用户。

  • 7
    • soulteary.com 3 years ago
    • Cache

    Golang 多版本管理

    如果你是一个 Golang 的用户,那么你大概率会遇到管理和维护 Golang 版本的诉求,如果你恰好同时需要开发调试两个不同版本的项目,在不考虑强制跳版本的情况下,你或许就需要使用“Golang 版本管理工具”来帮助你减轻负担了。 本篇文章将介绍最近几个月,...

  • 10

    一直用golang写业务代码,最近改动升级项把common module的version升级的v2,结果尴尬了,于是查了下文档,随手记录下v2.x及以后得版本的使用方法。 golang中module的版本管理分路径和版本号两部分,路径是go.mod中开始module

  • 3
    • chen-tao.github.io 2 years ago
    • Cache

    使用gvm管理多版本golang

    使用gvm管理多版本golang ...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK