golang多版本管理器

g是一个Linux、macOS、Windows下的命令行工具,可以提供一个便捷的多版本go环境的管理和切换。 特性支持列出可供安装的go版本号支持列出已安装的go版本号支持在本地安装多个go版本支持卸载已安装的go版本支持在已安装的go版本之间自由切换安装自动化安装Linux/macOS(适用于bash、zsh) # 建议安装前清空`GOROOT`、`GOBIN`等环境变量$ wget -qO- https://raw.githubusercontent.com/voidint/g/master/install.sh | bash$ echo "unalias g" >> ~/.bashrc # 可选。若其他程序(如'git')使用了'g'作为别名。$ source ~/.bashrc # 或者 source ~/.zshrc手动安装下载对应平台的二进制压缩包。将压缩包解压至PATH环境变量目录下,如/usr/local/bin。编辑shell环境配置文件(~/.bashrc、~/.zshrc...) $ cat>>~/.bashrc<<EOFexport GOROOT="${HOME}/.g/go"export PATH="${HOME}/.g/go/bin:$PATH"export G_MIRROR=https://golang.google.cn/dl/EOF使用查询当前可供安装的stable状态的go版本 $ g ls-remote stable1.11.91.12.4安装目标go版本1.12.4 $ g install 1.12.4Installed successfully$ go versiongo version go1.12.4 darwin/amd64查询已安装的go版本 $ g ls1.12.4查询可供安装的所有go版本 $ g ls-remote11.2.21.31.3.1... // 省略若干版本1.11.71.11.81.11.91.121.12.11.12.21.12.31.12.4安装目标go版本1.11.9 $ g install 1.11.9Installed successfully$ go versiongo version go1.11.9 darwin/amd64切换到另一个已安装的go版本 $ g ls1.11.91.12.4$ g use 1.12.4go version go1.12.4 darwin/amd64卸载一个已安装的go版本 ...

May 18, 2019 · 1 min · jiezi

使用gvm管理多golang版本但我想使用统一的GOTPAH

使用gvm管理golang版本遇到一个问题,就是我在.zshrc中设置了GOPATH,但是使用gvm切换后GOPATH又被gvm重新设置了,默认是$GVM_ROOT/pkgsets/go1.12.5/global。而我希望切换不同的GOROOT而GOPATH不变,因为我的项目代码都在原来的GOPATH中。 多版本共用一个GOPATH是没有冲突的,1.9的包会下载位置是$GOPATH/src,1.12的包下载位置是$GOPATH/mod。设置export GO111MODULE=on,1.12的项目用了gomod是不依赖GOPTAH的,新老项目放在公司路径下都能正常编译。 下面让我们解决这个问题。 最简单粗暴的方法就是gvm use 1.x之后,source .zshrc一下将$GOPATH设置为原来的。但是这显的很蠢。 第二种方法是gvm提供了修改环境变量的命令,gvm pkgenv,可以修改当前版本go相关的环境变量,注意这个命令只能改当前版本的,比如我现在是1.12,我要改全,还要go use 1.9再改一遍。另外改好了还要使用go use 1.x --default将default也改了。看了一下源码,环境变量都在$GVM_ROOT|environments文件夹里,进去把GOPATH批量替换了就行了,记得先备份一份。 第三种方法就是修改gvm use命令,gvm是shell编写的,安装好后各种命令都在$GVM_ROOT/scripts下,use命令对应的文件是$GVM_ROOT/scripts/env,在函数后面加一行export GOPATH=~/gopath。也可以自己写个包裹函数: export ZGOPATH=~/gopathfunction gouse() { gvm use $1 export GOPATH=$ZGOPATH}开始用的第二种方法,后面还是觉得第三种方法最省事,记录一下自己折腾操蛋的GOPATH的过程。go1.11有了go mod之后,心想终于可以抛弃GOPATH了,实际是必须要一个巫妖王(GOPATH),包和项目集中存放挺好。

May 11, 2019 · 1 min · jiezi

GVM - Go 的多版本管理工具,使用介绍

原文作者: dryyun原文链接: https://dryyun.com/2018/11/28…基本介绍项目地址Go GitHub GVM GitHub本机环境设备 MacBook Pro 系统 macOS High Sierra 10.13.6多版本管理使用场景在 Mac 上使用 brew install go 真的很简单,一个命令就安装了最新版本的 Go,但是在实际使用过程中线上版本跟你本地版本不一样,你需要切换想尝试一下最新版本的 Go,但是实际开发还是不变其他语言都有 xxvm 工具,Go 也要来一个以上,其实使用 docker 就能解决了,相比而言,我觉得直接切换版本是更轻量级的做法,除非你有同时开发几个项目,都使用不同版本的 Go 的经验。brew 有一点不好就是不能安装旧版本的软件,不能安装旧版本的 Go,在切换 Go 版本上也略显麻烦,这个时候就要用到多版本管理了。吐槽一下 brew 的升级,让我不能开心的切换 PHP 版本了,以前的 formula 有 php55,php56,php70,php71 ,都是独立的存在,只要 brew unlink,brew link 就可以了 现在改成 php@5.6,php@7.0,php@7.1,实现方式不同了,要切换版本,每次都要改 .zshrc 文件使用安装bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) 如果使用的 zsh,那么把 bash 改成 zsh 即可 安装成功,会在家目录下增加 .gvm 的隐藏目录,并且在 .bashrc 或者 .zshrc 文件最底部增加一行 [[ -s “/Users/someone/.gvm/scripts/gvm” ]] && source “/Users/someone/.gvm/scripts/gvm"命令基于 GVM v1.0.22 特别说明由于 Go 1.5 使用了自举,也就是用 Go 写 Go,如果在系统环境完全没有 Go 命令的情况下,使用 gvm install go 会报错,可以参考 gvm 文档相关说明,会要求先安装 Go 1.4,但是呢,对于高版本的 macOS 来说,安装 Go 1.4 是会失败的。所以我的做法是使用 brew install go 先安装一个 Go,然后再使用 gvm 安装多版本,不过也只是建议安装 >= 1.5 的版本。 GVM 本质上就是 shell 脚本,而作者的文档写的也不尽如人意,如果对命令不了解,对命令不满意,完全可以进入 cd ~/.gvm/scripts,查看、修改相应的命令。 比如查看各个命令的 help 帮助就很不同,gvm install - ,gvm listall help,gvm use -h,只能感慨作者 。Usage: gvm [command]Description: GVM is the Go Version ManagerCommands: version - print the gvm version number - 打印 GVM 的版本 get - gets the latest code (for debugging) - 获取 GVM 最新的代码 use - select a go version to use (–default to set permanently) - 当前终端环境使用某个 go 版本,加上 –default 代表所有新打开的终端环境都使用这个版本 - 查看帮助,gvm use -h diff - view changes to Go root - ??? help - display this usage text - 显示帮助信息 implode - completely remove gvm - 彻底删除 gvm 和安装的所有 go 版本和包 - 如果命令没用,那么删除 rm -rf ~/.gvm 目录,去掉 .bashrc 或者 .zshrc 的相关内容即可 install - install go versions - 安装某个 go 的版本 - 可以加上 tag, gvm install [tag],参考 https://github.com/golang/go/tags ,安装一些非稳定版本 - 查看帮助,gvm install - uninstall - uninstall go versions - 卸载某个 go 版本 cross - install go cross compilers - 安装交叉编译器 - gvm cross [os] [arch],os = linux/darwin/windows,arch = amd64/386/arm linkthis - link this directory into GOPATH - 链接指定目录到 GOPATH 路径 - 以个人使用来说,只要正确设置 GOPATH 就行,这个命令基本用不到,可以往下看 GOPATH 设置部分 - 查看帮助,gvm linkthis -h - 吐槽,是不是缺了 unlink 命令。。 list - list installed go versions - 列出安装的 Go 版本 listall - list available versions - 列出可用的 Go 版本 - 使用 --all ,列出所有的 tags - 查看帮助,gvm listall help alias - manage go version aliases - 管理 Go 版本别名 - gvm alias list ,列出所有别名 - gvm alias create [alias name] [go version name],创建别名 - gvm alias delete [alias name] ,删除别名 - 个人感觉也基本用不到 pkgset - manage go packages sets - gvm pkgset [create/use/delete/list/empty] [pkgset name] - 管理 GOPATHs 环境变量 - 会在 ~/.gvm/environments 目录下创建相应的文件 - 吐槽,没有类似的 unuse 命令 pkgenv - edit the environment for a package set - 编辑 pkgset 的环境变量 - gvm pkgenv [pkgset name] 环境设置通过 go env 可以查看当前设置的 Go 的环境。 其中 GOPATH 的设置,肯定是最重要的,不过在 go 1.11 版本中,推出了 go module,好像弱化了 gopath 的作用 。 通过 gvm use [version] 切换 Go 的版本,也会更改相应的环境变量,其中就包括 GOPATH="/Users/someone/.gvm/pkgsets/go1.10.4/global” 。 那么问题来了,我每次切换版本,都会改变 GOPATH ,这在开发中很蛋疼,你可以看出有三个命令,linkthis,pkgset,pkgenv 都是跟环境变量有关的。 对我而言,这些命令都不用,承接上文中安装,再在 [[ -s “/Users/someone/.gvm/scripts/gvm” ]] && source “/Users/someone/.gvm/scripts/gvm” 这句话后面增加相应的环境变量就可以覆盖了。GOPATH=“xxxx"GOBIN="$GOPATH/bin"PATH=="$PATH:$GOBIN” ...

March 26, 2019 · 3 min · jiezi