Go下载安装及切换不同版本的方法

一、下载安装

Go下载地址

Go提供了Windows、MacOS(ARM64) 和 MacOS(x86-64)、Linux版本,也可以下载源码自己编译安装。

Linux && MacOS

  • 下载压缩包

  • 解压到指定目录,如:/usr/local

shell 复制代码
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.2.linux-amd64.tar.gz
  • 把go的bin目录添加到环境变量
shell 复制代码
在 ~/.zshrc或~/.bashrc中添加如下行

export PATH=$PATH:/usr/local/go/bin
  • 使用环境变量立即生效
shell 复制代码
source ~/.zshrc 或 source ~/.bashrc
  • 测试go是否安装成功
shell 复制代码
go version

Windows

  • 直接双击 .msi文件进行引导安装

  • 安装完成后打开 cmd 或 power shell 输入 go version 验证安装是否成功

二、如何切换Go版本?

方法一:直接下载不同版本的压缩包,使用软连接指向不同的版本

  • 下载完压缩包,解压到其他目录,如:
shell 复制代码
tar -C ~/Downloads -xzf go1.21.9.linux-amd64.tar.gz
  • 把go目录重命名为 go1.21.9
shell 复制代码
mv go go1.21.9
  • 新建一个go全局目录,如:go_version
shell 复制代码
mkdir ~/go_version
  • 做一个软链接指向go1.21.9版本
shell 复制代码
ln -s ~/Downloads/go1.21.9 ~/go_version/go
  • 把~/go_version/go/bin目录加到到环境变量
shell 复制代码
export PATH=~/go_version/go/bin:$PATH
  • 验证是否安装成功
shell 复制代码
go1.21.9 version

扩展:此法为切换软件的通法,其他软件也适用。

方法二:使用go install 命令安装其他版本

已经安装go的情况下(例如当前版本为:1.22.2),可以通过go install 来安装其他版本

shell 复制代码
go install golang.org/dl/go1.22.1@latest

go1.22.1 download

go install 命令会把go1.22.1版本作为1.22.2的可执行安装包,存放在 ~/go/bin下面

再去用go1.22.1 download 则会下载1.22.1的源码,放到~/sdk下面

此时就可以用go1.22.1 version来验证是否安装成功了

为什么可以直接敲go1.22.1呢?实际上执行的是~/go/bin/go1.22.1这个二进制文件,而~/go/bin又加入了PATH变量,所以能执行。

sdk是不能删除的,go1.22.1会读取sdk里面的源码,删除后会提示sdk没有下载。

方法三:使用gvm来切换

gvm全称:Go Version Manager (GVM)是一个用于管理Go环境的开源工具。它支持安装多个Go版本,并使用GVM "pkgsets" 管理每个项目的模块。GVM(与Ruby中的RVM一样)最初是由Josh Bussdieker开发的,它允许为每个项目或项目组创建开发环境,分离不同的Go版本和包依赖关系,以提供更大的灵活性并防止版本问题。

安装gvm

shell 复制代码
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

命令解析:

-s -S 连用表示禁用进度条但可以显示错误信息

-L 表示重定向跟随

<(...) 此处为<(curl ...) ,此语法表示curl的执行结果被视作文件

bash < 表示拿到curl的执行结果作为标准输入传给bash

通过gvm安装go

shell 复制代码
gvm install go1.22.2

通过gvm切换go版本

shell 复制代码
gvm use go1.22.2

列出所有通过gvm安装的go版本

shell 复制代码
gvm list

列出所有可用的线上go版本

shel 复制代码
gvm listall

卸载go版本

shell 复制代码
gvm uninstall go1.22.2

完全移除gvm及其所有安装的go版本和依赖包

shell 复制代码
gvm implode

如果卸载失败,直接 rm -rf ~/.gvm

管理go的依赖包

pkgset允许独立管理不同的Go包集及其版本,从而更容易在不同的项目依赖关系之间切换。

shell 复制代码
// 创建包集合
gvm pkgset create [name]

// 选择包集合
gvm pkgset use [name]

// 列出创建的包集合
gvm pkgset list

// 删除包集合
gvm pkgset delete [name]

切换到指定的包集后,后续使用go build、go run命令时会把下载的包安装到包集目录

其他gvm命令

  • 打印gvm版本
shell 复制代码
gvm version
  • 获取gvm最新版本
shell 复制代码
gvm get
  • 打印帮助信息
shell 复制代码
gvm help

gvm 原理

其内部核心也是使用软连接,通过指向不同的版本使用不同的环境变量

后面再进行源码分析

相关推荐
云浪8 小时前
Go Context 到底是什么?
后端·go
newerp9 小时前
系统调用与 M/P 解绑
后端·程序员·go
newerp9 小时前
抢占式调度实现细节
后端·程序员·go
小小龙学IT10 小时前
Go 语言 net/http 网络编程深度解析:从 Handler 到生产级 HTTP 服务
go
名字还没想好☜10 小时前
Go 实现指数退避重试:context 取消、抖动 jitter 与什么时候别重试
后端·golang·go
我不会起名字32212 小时前
一天一道力扣Hot100(37):深度优先算法--括号生成
java·数据结构·c++·后端·python·算法·go
ITKEY_14 小时前
macOS搭建Go的开发环境
go
我不会起名字3221 天前
一天一道力扣Hot100(36):深度优先算法---组合总和
数据结构·c++·后端·python·算法·go
名字还没想好☜2 天前
Go context.AfterFunc 实战(Go 1.21):context 一取消就自动跑清理,告别手写 goroutine 监听 Done
后端·golang·go
liyinchi19883 天前
微信小程序支付遇到“由于小程序违规,支付功能暂时无法使用” 解决办法
java·微信小程序·go