当前位置: 首页 > article >正文

Golang 多版本安装小工具G


voidint制作的Golang版本安装管理,非常好用。想装就装,想换版本就换版本

除了一些使用go install的场景可能有不兼容,主要是安装了工具有时候不能直接用。

GitHub - voidint/g: Golang Version Manager​​​​​​​

使用方式很简单,我把作者github的readme抠下来,图没法显示,可以直接看项目首页

https://github.com/voidint/g

​# g

注意:master分支可能处于开发之中并非稳定版本,请通过tag下载稳定版本的源代码,或通过release下载已编译的二进制可执行文件。

g是一个 Linux、macOS、Windows 下的命令行工具,可以提供一个便捷的多版本 go 环境的管理和切换。

特性

  • 支持列出可供安装的 go 版本号
  • 支持列出已安装的 go 版本号
  • 支持在本地安装多个 go 版本
  • 支持卸载已安装的 go 版本
  • 支持在已安装的 go 版本之间自由切换
  • 支持软件自我更新(>= 1.3.0)

安装

自动化安装

  • Linux/macOS(适用于bash、zsh)

    # 建议安装前清空`GOROOT`、`GOBIN`等环境变量
    $ curl -sSL https://raw.githubusercontent.com/voidint/g/master/install.sh | bash
    $ echo "unalias g" >> ~/.bashrc # 可选。若其他程序(如'git')使用了'g'作为别名。
    $ source "$HOME/.g/env"
    

手动安装(linux/mac)

  • 下载release的二进制压缩包

  • 将压缩包解压至PATH环境变量目录下(推荐~/.g/bin目录)

  • 将所需的环境变量写入~/.g/env文件

    $ cat >~/.g/env <<'EOF'
    #!/bin/sh
    # g shell setup
    export GOROOT="${HOME}/.g/go"
    export PATH="${HOME}/.g/bin:${GOROOT}/bin:$PATH"
    export G_MIRROR=https://golang.google.cn/dl/
    EOF
    
  • ~/.g/env导入到shell环境配置文件(如~/.bashrc~/.zshrc…)

    $ cat >>~/.bashrc <<'EOF'
    # g shell setup
    if [ -f "${HOME}/.g/env" ]; then
        . "${HOME}/.g/env"
    fi
    EOF
    
  • 启用环境变量

    $ source ~/.bashrc # 或source ~/.zshrc
    

手动安装(windows系统 + powershell)

  • 创建目录mkdir ~/.g/bin

  • 下载release的windows版本的二进制压缩包, 解压之后放到~/.g/bin目录下

  • 默认二进制文件名是 g.exe, 如果你已经用g这个命令已经用作为 git 的缩写,那么你可以把 g.exe 改为其他名字,如 gvm.exe

  • 执行命令code $PROFILE, 这个命令会用vscode打开默认的powershell配置文件

  • 在 powershell 的默认配置文件中加入如下内容

    $env:GOROOT="$HOME\.g\go"
    $env:Path=-join("$HOME\.g\bin;", "$env:GOROOT\bin;", "$env:Path")
    
  • 再次打开 powershell 终端,就可以使用 g 或者 gvm 命令了

使用

查询当前可供安装的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

更新 g 软件本身

$ g update
A new version of g(v1.2.2) is available
Downloading 100% |███████████████| (3.7/3.7 MB, 2.358 MB/s)
Computing checksum with SHA256
Checksums matched
Update completed

FAQ

  • 环境变量G_MIRROR有什么作用?

    由于中国大陆无法自由访问 Golang 官网,导致查询及下载 go 版本都变得困难,因此可以通过该环境变量指定一个或多个镜像站点(多个镜像站点之间使用英文逗号分隔),g 将从该站点查询、下载可用的 go 版本。已知的可用镜像站点如下:

    • Go官方镜像站点:https://golang.google.cn/dl/
    • Go语言中文网:https://studygolang.com/dl
    • 阿里云开源镜像站点:https://mirrors.aliyun.com/golang/
  • 环境变量G_EXPERIMENTAL有什么作用?

    当该环境变量的值为true时,将开启所有的实验特性

  • 环境变量G_HOME有什么作用?

    按照惯例,g 默认会将~/.g目录作为其家目录。若想自定义家目录(Windows 用户需求强烈),可使用该环境变量切换到其他家目录。由于该特性还属于实验特性,需要先开启实验特性开关G_EXPERIMENTAL=true才能生效。特别注意,该方案并不十分完美,因此才将其归类为实验特性,详见#18。

  • macOS 系统下安装 go 版本,g 抛出[g] Installation package not found字样的错误提示,是什么原因?

    Go 官方在1.16版本中才加入了对ARM架构的macOS系统的支持。因此,ARM 架构的 macOS 系统下均无法安装1.15及以下的版本的 go 安装包。若尝试安装这些版本,g 会抛出[g] Installation package not found的错误信息。

  • 是否支持网络代理?

    支持。可在HTTP_PROXYHTTPS_PROXYhttp_proxyhttps_proxy等环境变量中设置网络代理地址。

  • 支持哪些 Windows 版本?

    因为g的实现上依赖于符号链接,因此操作系统必须是Windows Vista及以上版本。

  • Windows 版本安装以后不生效?

    这有可能是因为没有把下载安装的加入到 $Path 的缘故,需要手动将 $Path 纳入到用户的环境变量中。为了方便起见,可以使用项目中的 path.ps1 的 PowerShell 脚本运行然后重新启动计算机即可。

  • 支持源代码编译安装吗?

    不支持

鸣谢

感谢nvm、n、rvm等工具提供的宝贵思路。


http://www.kler.cn/news/10432.html

相关文章:

  • 2023MathorCup数模A题思路数据代码论文【全网最全分享】
  • Python轻量级Web框架Flask(5)——Flask模型基础和数据迁移
  • 2023年MathorCup数学建模C题电商物流网络包裹应急调运与结构优化问题解题全过程
  • 2023-04-16 学习记录--C/C++-邂逅C/C++
  • 这篇文章价值很大:股票历史分时成交数据怎么简单获取?【干货】
  • 2023年七大最佳勒索软件解密工具
  • C#基础复习
  • 轨道交通信号系统介绍
  • 学术论文句式整理(持续更新中)
  • 【C++进阶】function和bind及可变模板参数
  • SpringBoot使用Spring Validation案例
  • AXI write data在Write data channel的排布
  • HR:面试官最爱问的linux问题,看看你能答对多少
  • 推荐一款 AI 脑图软件,助你神速提高知识体系搭建
  • C++中的类模版
  • 已知原根多项式和寄存器初始值时求LFSR的简单例子
  • C学习笔记1
  • 【安全与风险】恶意软件:概念、攻击和检测
  • 走进小程序【七】微信小程序【常见问题总结】
  • 反序列化渗透与攻防(二)之Java反序列化漏洞
  • 对 FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP 的实践
  • 这家年销售额309亿的Tier 1,要谈一场千亿新生意
  • 【软考备战·希赛网每日一练】2023年4月12日
  • apache配置与应用
  • ChatGPT实战100例 - (01) 秒出思维导图
  • 程序员的“灵魂笔记本“:五款高效笔记软件推荐
  • 线程池
  • WinForms 网格控件 - iGrid.NET 10.1.22 Crack
  • 1.java程序员必知必会类库之日志
  • Windows使用Dockers+battery historian踩坑记